Этот метод еще называют методом касательных. Он позволяет быстрее найти корень (сходится за меньшее количество приближений), чем предыдущий. Метод заключается в следующем.
1. Выбирается интервал [a,b] значений аргумента Х, на котором ищется корень. На этом интервале функция должна менять знак.
2. Начальное значение корня X0 принимается равным левой (a) или правой (b) границе интервала.
3. Вычисляется очередное приближение по формуле
Хслед= Хпред– f(Хпред)/f '(Хпред)
4. Если |Хслед- Хпред| <= E, то Хслед– корень, в противном случае
присвоить значение Хследпеременной Хпреди перейти к п. 3.
В отличие от метода деления отрезка пополам рассмотренный алгоритм позволяет определить корень не для любой функции, а если:
1) f(x) дифференцируема;
2) f '(x) ≠ 0 в Е-окрестности корня.
Неудачный выбор Х0 может привести к тому, что приближения "расходятся" от точки корня.
Рассмотрим пример программы нахождения корня уравнения методом Ньютона. Будем, как и в п. 19.2.1 считать, что в программе будет использована функция f(x) и ее производная Prf(x).
Обозначим:
Хo => x0; E => E; Хпред => x; Хслед => xn
Программа будет иметь вид
Program Newton;
Var
y, x0, X, xn, E : Real;
Function f(x: Real): Real;
Begin
f:= { здесь должна быть формула для вычисления функции}
End;
Function Prf(x: Real): Real;
Begin
Prf:= { здесь будет формула для вычисления производной}
End;
Begin
Writeln('Введите начальное приближение корня и погрешность');
Readln(a, E);
x := a;
{ вычисление корня }
Repeat
xn := x-f(x)/Prf(x);
y := Abs(xn-x);
x := xn;
Until y <= E;
Writeln('Корень = ',xn:8:4,' разность = ',y:8:6);
Y:=f(x);
Writeln('Функция = ', y:10:7);
Writeln('Работа окончена');
Readln;
End.
Можно определить количество приближений (итераций), оно равно числу повторений цикла.