声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 953|回复: 3

[编程技巧] 牛顿法设定初值出错

[复制链接]
发表于 2006-8-24 17:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
%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,有时是被零除,有时候没有任何说明和警告。请高手指教,谢谢!
回复
分享到:

使用道具 举报

发表于 2006-8-24 21:37 | 显示全部楼层
跟踪变量看一下
 楼主| 发表于 2006-8-25 09:44 | 显示全部楼层
不好意思,如何跟踪变量
发表于 2006-8-25 11:06 | 显示全部楼层
最简单的就是设置一个断点,用鼠标或在工作空间中查看变量值。
或者可以将该变量的值输出到命令窗口或文本文件。

跟踪变量应该有很多方法的。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-25 07:15 , Processed in 0.063411 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表