编写简单的Matlab函数的问题

时间:2016-04-25 21:17:53

标签: matlab

我来自物理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近似多项式根的函数,并给出了所需的步数。问题是它总是给出错误的答案。我用不同的多项式和间隔尝试了很多次,它总是接近,从未达到所需的精度。代码中是否有一些我不知道的错误?任何帮助表示赞赏。

1 个答案:

答案 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