Решение нелинейных уравнений. Методы бисекций, простой итерации, Ньютона.

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