【问题标题】:Issue with coding a simple Matlab function编写一个简单的 Matlab 函数的问题
【发布时间】:2016-04-25 21:17:52
【问题描述】:

我来自物理 SE。

最近开始学习Matlab,训练了一些简单的函数,现在遇到了一个很严重的问题:

function [x,n] = newton( p,a,b,d )
%This function approximates a root of a polynomial in [a,b] with an error bound less than d. 
c=(a+b)/2;
q=polyder(p);
c1=c-polyval(p,c)/polyval(q,c);
n=1;
while c1-c > d
c=c1;
c1=c-polyval(p,c)/polyval(q,c);
n=n+1;
end
x=c1;
end

如您所见,它是一个使用Newton's method 逼近多项式根并给出所需步数的函数。问题是它总是给出错误的答案。我已经用不同的多项式和区间尝试了很多次,它总是接近但从未达到所需的精度。代码中是否有一些我不知道的错误?任何帮助表示赞赏。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    在测试这些迭代算法时,您需要在差异的绝对值小于您的阈值时停止 - 您正在严格检查幅度(通常为负数)。

    function [x,n] = newton( p,a,b,d )
    %This function approximates a root of a polynomial in [a,b] with an error bound less than d. 
    c=(a+b)/2;
    q=polyder(p);
    c1=c-polyval(p,c)/polyval(q,c);
    
    n=1;
    while abs(c1-c) > d  %% put absolute values here
      c=c1;
      c1=c-polyval(p,c)/polyval(q,c); 
      n=n+1;
    end
    
    x=c1;
    end
    

    【讨论】:

      猜你喜欢
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      • 1970-01-01
      • 2016-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多