Метод хорд

Задача

Найти корень уравнения методом хорд.

Решение

Будем искать корень функции f(x). Выберем две начальные точки C1(x1;y1) и C2(x2;y2) и проведем через них прямую. Она пересечет ось абсцисс в точке (x3;0). Теперь найдем значение функции с абсциссой x3. Временно будем считать x3 корнем на отрезке [x1;x2]. Пусть точка C3имеет абсцисcу x3 и лежит на графике. Теперь вместо точек C1 и C2 мы возьмём точку C3 и точку C2. Теперь с этими двумя точками проделаем ту же операцию и так далее, т.е. будем получать две точки Cn + 1 и Cn и повторять операцию с ними. Таким образом мы будем получать две точки, отрезок, соединяющий которые, пересекает ось абсцисс в точке, значение абсциссы которой можно приближенно считать корнем. Эти действия нужно повторять до тех пор, пока мы не получим значение корня с нужным нам приближением. (источник)

Пример

Program MethodHorda;
Uses Crt;
Var
	a,b,t,x,eps: Real;

Function func(x: Real): Real;
Begin
	{ Здесь прописываем функцию, корень которой ищем }
	func:=x*x*x - 2*x*x + 7*x + 3;
End;

Begin
	ClrScr;
	{ Ввод исходных данных }
	Write('Введите левую границу отрезка: ');
	ReadLn(a);
	Write('Введите правую границу отрезка: ');
	ReadLn(b);
	Write('Введите необходимое приближение (точность): ');
	ReadLn(eps);
	{ Вычисляем в цикле, пока не достигнуто заданное приближение }
	Repeat
		x:=a-func(a)*(b-a)/(func(b)-func(a));
		If func(a)*func(x)<=0 Then b:=x
                   Else a:=x;
	Until abs(func(x))<=eps;
	Writeln(' Корень уравнения x = ', x:10:8);
	Repeat Until KeyPressed
End.