Метод Ньютона (метод касательных)

 

Расчетная формула метода Ньютона имеет вид:

. Геометрически метод Ньютона означает, что следующее приближение к корню есть точка пересечения с осью ОХ касательной, проведенной к графику функции y=f(x) в точке .

Теорема о сходимости метода Ньютона. Пусть - простой корень уравнения , в некоторой окрестности которого функция дважды непрерывно дифференцируема. Тогда найдется такая малая - окрестность корня , что при произвольном выборе начального приближения из этой окрестности итерационная последовательность метода Ньютона не выходит за пределы окрестности и справедлива оценка

, где , .

Критерий окончания итерационного процесса. При заданной точности >0 вычисления следует вести до тех пор, пока не окажется выполненным неравенство .

 

ПРИМЕР 3. Решение уравнения методом Ньютона.

 

function ex3

% Решить уравнение f(x)=0, где где f(x)= x^3 - cos(x) + 1 методом Ньютона

% Введём функцию f(x)

f = inline('x.^3 - cos(x) + 1');

% Её производная

df = inline('3*x.^2 + sin(x)');

root1 = newton(f, df, -0.5);

% Проверим корни

f(root1)

root2 = newton(f, df, -0.1);

% Проверим корни

f(root2)

% Метод Ньютона

function root = newton(f, df, x0)

root = x0 - f(x0) / df(x0);

old_root = x0;

while abs(old_root - root) > 2 * eps

t = old_root;

old_root = root;

root = t - f(t) / df(t);

end

>>

ans = -9.5740e-005

ans = 8.3665e-004

 

Как указано в теореме, метод Ньютона обладает локальной сходимостью, то есть областью его сходимости является малая окрестность корня . Неудачный выбор может дать расходящуюся итерационную последовательность.

 

ПРИМЕР 4. Чувствительность метода Ньютона к выбору начального приближения.

function ex2

% Чувствительность метода Ньютона к выбору начальных значений.

% Введём функцию f(x)

syms x;

f = (x - 1.3) ./ ((x- 1.3).^2 + 1);

[root1, iter1] = newton(f, 1.87);

% Проверим корни

subs(f, root1)

[root2, iter2] = newton(f, 1.88);

% Проверим корни

subs(f, root2)

% Сравним число итераций

iter1

iter2

% Видим, что число итераций в первом случае намного меньше, чем во втором

% Метод Ньютона

function [root, iter] = newton(f, x0)

df = diff(f);

root = x0 - subs(f, x0) / subs(df, x0);

old_root = x0;

iter = 0;

while abs(subs(f, old_root)) > 10 * eps

t = old_root;

old_root = root;

root = t - subs(f, t) / subs(df, t);

iter = iter + 1;

if iter > 200

warning('Max number of iterations reached');

root = NaN;

return;

end

end

>>

ans = 0

ans = 1.1545e-015

iter1 = 13

iter2 = 103

>>

ans = 0

ans = 1.1545e-015

iter1 = 13

iter2 = 103