MatLab - алгоритм метода Ньютона

Я написал следующий алгоритм для оценки функции в MatLab с использованием метода Ньютона (в моем решении мы установили r = -7):

function newton(r);
syms x;
y = exp(x) - 1.5 - atan(x);
yprime = diff(y,x);
f = matlabFunction(y);
fprime = matlabFunction(yprime);
x = r;
xvals = x
for i=1:8 
    u = x;
    x = u - f(r)/fprime(r);
    xvals = x
end

Алгоритм работает так, что он работает без каких-либо ошибок, но числа продолжают уменьшаться на каждой итерации, хотя, согласно моему учебнику, выражение должно сходиться примерно к -14 для x. Мой алгоритм корректен первые две итерации, но затем он выходит за пределы -14 и, в конце концов, заканчивается на -36,4 после завершения всех итераций.

Если кто-нибудь может помочь мне с тем, почему алгоритм не работает должным образом, я был бы очень признателен!

2 ответа

Решение

Я думаю

x = u - f(r)/fprime(r);

должно быть

x = u - f(u)/fprime(u);

Если вы всегда используете rты всегда убиваешь x на то же значение.

syms x
y = exp(x) - 1.5 - atan(x); % your function is converted in for loop
x=-1;
n=10;
v=0;
for i=2:n
    x(i)=tan(exp(x(i-1))-1.5);
    v=[v ;x(i)]; % you will get solution vector  for each i value
end
v
Другие вопросы по тегам