Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
回复
 
主题工具 显示模式
旧 2013-04-08, 16:35   #1
shuiyudao
初级会员
 
注册日期: 2013-04-08
年龄: 38
帖子: 1
声望力: 0
shuiyudao 正向着好的方向发展
默认 新人求助 非线性方程组迭代问题

rt 最近在做一个算例 控制方程组是非线性的 有有限差分后 循环迭代求解 最后求补出来 显示NaN
程序如下:
gt=0.1;gb=0.1;q=sym0.2;ratio=2;
ht=0.15;hb=0.15;eg=20;dx=ratio/100;die=0;diedai=input('迭代步=');
t(102)=0;w(102)=0;p(102)=0;tol=0.0001;
for i=1:51
p(i)=q;
end
for i=1:diedai
die=die+1;
wr(1:102)=w(1:102);
tr(1:102)=t(1:102);
for j=2:101
aa(j)=wr(j+1)-wr(j-1);
aa(j)=aa(j)/2/dx;
bb(j)=tr(j+1)-tr(j-1);
bb(j)=bb(j)/2/dx;
zx(j)=aa(j)/sqrt(aa(j)*aa(j)+1);
yx(j)=1/sqrt(aa(j)*aa(j)+1);
w(j)=0.5*wr(j+1)+0.5*wr(j-1)+dx*dx/2/(tr(j)*yx(j)^3+gt+gb)*(p(j)+zx(j)*bb(j)-wr(j));
t(j)=0.5*tr(j+1)+0.5*tr(j-1);
t(j)=t(j)+dx*dx/2*zx(j)*yx(j)/(tr(j)*yx(j)^3+gt+gb)*(p(j)+zx(j)*bb(j)-wr(j))*bb(j);
t(j)=t(j)-dx*dx/2/yx(j)*(gt/ht/ht+gb/hb/hb)*(sqrt(tr(j)*tr(j)/eg/eg+1-aa(j)*aa(j))-1);
end
w(1)=w(3);
w(102)=w(100);
t(1)=t(3);
t(102)=-t(100);
pa=0;
pb=0;
for j=2:102
if w(j)~=0
ca=abs(w(j)-wr(j))/abs(w(j));
if double(ca)>tol
pa=pa+1;
end
elseif wr(j)==0&w(j)==0
pa=pa;
elseif wr(j)~=0&w(j)==0
pa=pa+1;
end
end
for j=2:102
if t(j)~=0
ca=abs(t(j)-tr(j))/abs(t(j));
if double(ca)>tol
pa=pa+1;
end
elseif tr(j)==0&t(j)==0
pb=pb;
elseif tr(j)~=0&t(j)==0
pb=pb+1;
end
end
if pa==0&pb==0
die
break
end
end
shuiyudao 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码



所有时间均为北京时间。现在的时间是 16:25


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.