2012-06-21 14 views
0

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

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 после завершения всех итераций.

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

ответ

3

Я думаю

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

должен быть

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

Если вы всегда используете r, вы всегда декремента x одним и тем же значением.

+0

Awesome! Теперь это работает как шарм, и, конечно же, теперь я вижу, что ваш ответ заключается в том, как следует писать формулу :). Большое спасибо! – Kristian

1
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 
Смежные вопросы