Пусть решается уравнение f(x)=0 и функция f(x) непрерывна на отрезке [a,b] =[x1,x2].
Отрезок [a,b] содержит корень, т.е. f(a)*f(b)<0.
Делим отрезок [a,b] пополам, т.е. выбираем начальное уравнение корня x=
, если f(x)=0, то х является корнем уравнения, если f(x) не равно нулю, то выбираем тот из отрезков [a,x] или [x,b], на концах которого функция f(x) имеет противоположные знаки. Выбранный отрезок снова делим пополам и проводим те же рассуждения. Процесс деления отрезков пополам продолжается до тех пор, пока длина отрезка на концах которого функция имеет разные знаки не станет < e
[b-a]< e =10-5.
![]() |
Схема реализации алгоритма имеет вид: [a,b]=[x1,x2] e=10-5
Уточнение корня по методу Хорд
По методу Хорд выбирается произвольное начальное значение корня из отрезка [a,b] на котором корень существует xÎ[a,b]=[x1,x2].
Затем по методу Хорд корень уточняется. Найденное новое значение корня подставляется в правую часть уравнения и т.д. пока разность между двумя приближениями не станет меньше
< e = 10-5. Расчётная формула метода Хорд имеет вид:
xn+1=xn-
(b-x).
Графический метод Хорд имеет вид:
![]() |
Отделение корней
![]() |
program otd;
label 10;
x1=a
x2 =x1 + h
var
a,b,x1,x2,y1,y2,h,d:real;
function f(x:real):real;
y1=f(x1)
begin
f:=2.2*x-exp(x*ln(2));
y2=f(x2)
Нет
end;
Да
begin
writeln(‘введите a,b,h’);
readln(a,b,h);
x1:=a;x2:=x1+h;
x1=x2
x2=x1+h
y1=y2
y1:=f(x1);
10: y2:=f(x2);
Да
if y1*y2<0 then writeln(x1:8:5,' ',x2:8:5);
x1:=x2;x2:=x1+h;
Нет
y1:=y2;
if x2<=b then goto 10;
readln;
End.
ввод:
0.1,10,1e-4
ответ:
х1=0.10000
х2=1.10000
Уточнение корней
Метод половинного деления
![]() |
|
label 2, 10;
|
|
function f(x:real):real;
![]() | |||
| |||
|
|
begin
f:= 2.2*x-exp(x*ln(2));
| ||||
| ||||
end;
begin
|
writeln(‘введите a,b,e’);
![]() |
readln(a,b,e);
|
y:=f(a);
10:x:=(a+b)/2;
z:=f(x);
if z=0 then goto 2;
if y*z<0 then b:=x;
begin a:=x; y:=f(b); end;
if b-a>e then goto 10;
2:writeln('x=',x:8:5);
readln;
end.
ввод:
0.1, 1.1, 1е-5
ответ:
х=0.78111
Метод хорд

|
program horda;
label 10;
|
|
function f(x:real):real;
begin
Да
f:= 2.2*x-exp(x*ln(2));
|
![]() |
end;
|
begin
writeln(‘введите x,b,e’);
readln(x,b,e);
10: y:=x-f(x)/(f(b)-f(x))*(b-x);
d:=abs(y-x);
x:=y;
if d>e then goto 10;
y:=f(x);
writeln('x=',x:8:5);
end.
ввод:
0.1, 1.1, 1е-5
ответ:
х=0.78110
Проверка уравнения в ППП "Eureka"
Ввод:
2.2*x-exp(x*ln(2))=0
Ответ:
X=0.78091254
Maximum error is 3.5465456e-7













