我来自物理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近似多项式根的函数,并给出了所需的步数。问题是它总是给出错误的答案。我用不同的多项式和间隔尝试了很多次,它总是接近,从未达到所需的精度。代码中是否有一些我不知道的错误?任何帮助表示赞赏。
答案 0 :(得分:2)
在测试这些迭代算法时,您需要在差值的绝对值小于阈值时停止 - 您要严格检查幅度(通常为负值)。 / p>
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