jifang29 发表于 2006-8-24 17:18

牛顿法设定初值出错

%product.m%
function y=product(a0)
a=a0;
if (a<21)
    y=factorial(a);
else
   y=1;
   for i=1:a
   y=y*i
   end
end   
%sun.m%
function y=sun(k0,t0,w10,w20,x)
k=k0;t=t0;w1=w10;w2=w20;
y=0;
for p=0:k   
    sum1=0;n=p;
    while( n<=2*t)
      if (n~=t)
             s=(sin(w2*(n-t))-sin(w1*(n-t)))/(pi*(n-t));
             sum1=sum1+s*product(k+n-p)/(product(n-p)*product(k))*x.^(k+n-2*p);      
      else
             s=(w2-w1)/pi;
             sum1=sum1+s*product(k+n-p)/(product(n-p)*product(k))*x.^(k+n-2*p);
      end   
      n=n+1;
    end
    z=(-1)^(p+k)*product(k)/(product(k-p)*product(p));
    y=y+z*sum1;
end
%fun4.m%
function y=fun4(x)
y=sun(20,16,3*pi/4,pi,x)
%newton2.m%
function y=newton2(x01,x02,m,eps)
x(1)=x01;x(2)=x02;
c=1;
i=2;
while (abs(c)>eps*x(i))
    x(i+1)=x(i)-fun4(x(i))*(x(i)-x(i-1))/(fun4(x(i))-fun4(x(i-1)));
    c=x(i+1)-x(i);
    i=i+1;
    if (i>m)error('m is full');
      return;
    end
end
y=x(i);i

从图中可以看出其x在(-1,1)之间存在很多值,但是当我设定初值为负值时,结果经常是NaN,有时是被零除,有时候没有任何说明和警告。请高手指教,谢谢!

happy 发表于 2006-8-24 21:37

跟踪变量看一下

jifang29 发表于 2006-8-25 09:44

不好意思,如何跟踪变量

toes 发表于 2006-8-25 11:06

最简单的就是设置一个断点,用鼠标或在工作空间中查看变量值。
或者可以将该变量的值输出到命令窗口或文本文件。

跟踪变量应该有很多方法的。
页: [1]
查看完整版本: 牛顿法设定初值出错