Метод Ньютона для случая кратного корня обладает лишь линейной скоростью сходимости. Чтобы сохранить квадратичную сходимость его модифицируют следующим образом:
, где - кратность корня.
Как правило, значение v неизвестно. Используя метод Ньютона, можно узнать кратность корня. Для этого будем задавать значения = 1, 2, 3 и вычислять значение корня с заданной точностью, одновременно подсчитывая количество итераций для каждого значения . При некотором значении число итераций будет минимальным. Это значение и есть кратность корня.
Пример 7. Определение кратности корня методом Ньютона.
function ex3
% Определить кратность корня f(x), где f(x)= (tan(x)^2 -1)^2 методом Ньютона
% Введём функцию f(x)
syms x;
f = (tan(x)^2 -1)^2;
[root1, iter1] = newton(f, 0.5, 1);
[root2, iter2] = newton(f, 0.5, 2);
[root3, iter3] = newton(f, 0.5, 3);
% То m, где меньше итераций - кратность корня
iter1
iter2
iter3
% Меньше всего итераций при m = 2, значит кратность корня - 2
% Метод Ньютона
function [root, iter] = newton(f, x0, m)
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 - m*subs(f, t) / subs(df, t);
iter = iter + 1;
if iter > 200
warning('Max number of iterations reached');
root = NaN;
return;
end
end
>>
iter1 = 45
iter2 = 7
iter3 = 45