我编写了以下算法,以便使用牛顿方法评估 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,最后在所有迭代完成后以 roughøy -36.4 结束。
如果有人能给我一些关于为什么算法无法正常工作的帮助,我将不胜感激!
我认为
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