Задача

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


Геометрическое описание

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

 

Решение методом хорд


?01 Program MethodHorda;
02 Uses Crt;
03 Var
04 a,b,t,x,eps: Real;
05
06 Function func(x: Real): Real;
07 Begin
08 { Здесь прописываем функцию, корень которой ищем }
09 func:=x*x*x - 2*x*x + 7*x + 3;
10 End;
11
12 Begin
13 ClrScr;
14 { Ввод исходных данных }
15 Write('Введите левую границу отрезка: ');
16 ReadLn(a);
17 Write('Введите правую границу отрезка: ');
18 ReadLn(b);
19 Write('Введите необходимое приближение (точность): ');
20 ReadLn(eps);
21 { Вычисляем в цикле, пока не достигнуто заданное приближение }
22 Repeat
23 x:=a-func(a)*(b-a)/(func(b)-func(a));
24 If func(a)*func(x)<=0 Then b:=x
25 Else a:=x;
26 Until abs(func(x))<=eps;
27 Writeln(' Корень уравнения x = ', x:10:8);
28 Repeat Until KeyPressed
29 End.