0

我编写了以下算法,以便使用牛顿法评估 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

该算法的工作原理是它运行时没有任何错误,但数字在每次迭代时都在不断减少,即使根据我的教科书,对于 x,表达式应该收敛到大约 -14。我的算法在前两次迭代中是正确的,但随后它超出了 -14 并最终在所有迭代完成后以粗略 -36.4 结束。

如果有人可以就算法为什么不能正常工作给我一些帮助,我将不胜感激!

4

2 回答 2

3

我认为

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

应该

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

如果你总是使用r,你总是递减x相同的值。

于 2012-06-21T22:43:25.943 回答
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
于 2012-08-02T15:07:11.690 回答