MatLab - 牛顿方法算法

时间:2012-06-21 22:35:54

标签: algorithm matlab newtons-method

我编写了以下算法,以便使用牛顿方法评估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之后它最终会在所有迭代完成后最终在roughøy-36.4结束。

如果有人可以帮我解释为什么算法不能正常工作,我会非常感激!

2 个答案:

答案 0 :(得分:3)

我认为

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

应该是

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

如果您始终使用r,则始终会将x递减相同的值。

答案 1 :(得分: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