Найти корень уравнения методом хорд.
Будем искать корень функции f(x). Выберем две начальные точки C1(x1;y1) и C2(x2;y2) и проведем через них прямую. Она пересечет ось абсцисс в точке (x3;0). Теперь найдем значение функции с абсциссой x3. Временно будем считать x3 корнем на отрезке [x1;x2]. Пусть точка C3имеет абсцисcу x3 и лежит на графике. Теперь вместо точек C1 и C2 мы возьмём точку C3 и точку C2. Теперь с этими двумя точками проделаем ту же операцию и так далее, т.е. будем получать две точки Cn + 1 и Cn и повторять операцию с ними. Таким образом мы будем получать две точки, отрезок, соединяющий которые, пересекает ось абсцисс в точке, значение абсциссы которой можно приближенно считать корнем. Эти действия нужно повторять до тех пор, пока мы не получим значение корня с нужным нам приближением. (источник)
function f(x:real):real;
begin
f:=x*x*x+x-5;
end;
var xn,xk,p,e:real;
begin
e:=0.001;
xn:=0.5;
xk:=2;
repeat
p:=(f(xk)*xn-f(xn)*xk)/(f(xk)-f(xn));
if abs(f(p))<=e then
begin
writeln('x=',p);
readln;
exit;
end;
if f(xn)*f(xk)>0 then xn:=p else xk:=p;
until abs((f(xk)*xn-f(xn)*xk)/f(xk)-f(xn)-p)<=e;
writeln('x=',p);
readln
end.
Следующий вариант программы
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.