huangxuemei513 发表于 2007-7-21 10:39

如何解决程序循环次数增加后出现Inf或NAN

:@( 在matlab矩阵计算
X=A/B
前300个循环一切正常
300以后突然发散成Inf或NAN
可能是甚么原因啊?
麻烦高手指点

[ 本帖最后由 eight 于 2007-7-23 12:50 编辑 ]

hector1982 发表于 2007-7-21 10:47

能不能把程序写多点啊!A B 是什么啊?

huangxuemei513 发表于 2007-7-21 19:29

本帖最后由 牛小贱 于 2014-6-29 13:14 编辑

AX=B
A是系数矩阵,B是列矩阵
附程序如下,望各位高手不吝赐教,小女子暂且先谢过:
clear
yy=1e-6;zz=1e-6;tt=1e-3;yita=4.6857e-7; R=3.3333e-5; seta=4.027e+6; B=0.5;rou=2450;
N=1;
A=5e-4;
m=200;n=500;
C=zeros(2*m+1,3*n); E=zeros(2*m+1,3*n);
F=zeros(2*m+1,3*n); H=zeros(2*m+1,3*n);
D=939140;G=-935140;
X=zeros(2*m+1,3*n)+eps;
QX=zeros(2*m+1,3*n)+eps;
U=ones(2*m+1,3*n)*eps;
QU=ones(2*m+1,3*n)*eps;

vy=zeros(2*m+1,3*n);
vz=zeros(2*m+1,3*n);
C=-[(N*vy)/(2*yy)]-yita/yy^2; E=[(N*vy)/(yy^2)]-yita/yy^2;
F=[(N*(vz+R))/(2*zz)]+yita/zz^2;
H=-[(N*(vz+R))/(2*zz)]+yita/zz^2;


A1=zeros(2*m+1);
for j=2:n-1
i=m;
while i*yy>800*(j*zz)^2
i=i-1;
end

                                                
A1(1+m-i,1+m-i)=1;
A1(1+m+i,1+m+i)=1;
for k=2+m-i:m+i
A1(k,k-1)=C(k,k-1);A1(k,k)=D;A1(k,k+1)=E(k,k+1);
end

AA=zeros(2*i+1);
u=1;v=1;
for h=1+m-i:1+m+i
for g=1+m-i:1+m+i
AA(u,v)=A1(h,g);
v=v+1;
end
u=u+1;
v=1;
end

Y=zeros(2*m+1,1);
for f=2+m-i:m+i
Y(f,1)=F(f,j-1)*X(f,j)+G*X(f,j)+H(f,j+1)*X(f,j+1)-seta*(B^2)*X(f,j)/rou;
end
Y(1+m-i,1)=2*eps/yy^2;
Y(1+m+i,1)=2*eps/yy^2;

Y1=zeros(2*i+1,1);
u=1;
for h=1+m-i:1+m+i
Y1(u,1)=Y(h,1);
u=u+1;
end

X1=zeros(2*i+1,1);
X1=(AA+eps)\Y1;

Xj=zeros(2*m+1,1);
u=1;
for h=1+m-i:1+m+i
Xj(h,1)=X1(u,1);
u=u+1;
end

X(:,j)=Xj;
end                                          
X

xjzuo 发表于 2007-7-21 22:12

试试pinv.

huangxuemei513 发表于 2007-7-22 09:49

改成
X1=pinv((AA+eps)\Y1);
运行出现:

??? Index exceeds matrix dimensions
Error in   ==> Xj(h,1)=X1(u,1);

pinv试了 不好用也:@(

[ 本帖最后由 ChaChing 于 2010-4-4 20:57 编辑 ]

eight 发表于 2007-7-23 12:49

请看看置顶贴,然后找到“常见出错问题整理”的帖子,建议先阅读一下

[ 本帖最后由 ChaChing 于 2010-4-4 20:59 编辑 ]

lxlxlxx 发表于 2011-8-7 15:27

回复 1 # huangxuemei513 的帖子

请问,您的问题得到解决了么?我现在也遇到了同样的问题,计算过程总是应为NaN终止,比如100次的迭代,一般到10次以下就终止了,望指点

liyukui89 发表于 2014-6-19 21:44

huangxuemei513 发表于 2007-7-21 19:29
AX=B
A是系数矩阵,B是列矩阵
附程序如下,望各位高手不吝赐教,小女子暂且先谢过:


你好,你的问题解决了吗?我在分解循环的时候也遇到矩阵的最后一行是INF,望指点,谢谢!

chybeyond 发表于 2014-6-20 09:09

liyukui89 发表于 2014-6-19 21:44
你好,你的问题解决了吗?我在分解循环的时候也遇到矩阵的最后一行是INF,望指点,谢谢!

参考4楼方法,试试pinv
页: [1]
查看完整版本: 如何解决程序循环次数增加后出现Inf或NAN