【问题标题】:MatLab - Newton's method algorithmMatLab - 牛顿法算法
【发布时间】:2012-06-24 06:12:00
【问题描述】:

为了在 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 结束。

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

【问题讨论】:

    标签: algorithm matlab newtons-method


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      我认为

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

      应该是

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

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

      【讨论】:

      • 太棒了!现在它就像一个魅力,当然,我现在看到你的答案是公式应该如何写:)。非常感谢!
      猜你喜欢
      • 2019-06-19
      • 1970-01-01
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-17
      • 2017-05-05
      相关资源
      最近更新 更多