huangxuemei513 发表于 2007-1-19 13:12

矩阵索引超出大小限制,检查好多遍也没有发现问题,帮忙啊!OTL

我调试的时候发现结果是:矩阵索引超出大小限制.检查好多遍也没有发现问题出在哪里.拜托各位高手指教啊!具体程序如下:
yy=0.001;zz=0.001;tt=0.01;yita=1; R=0.01;
N=1.20;A=0.05;
m=236;n=234;
X=zeros(2*m+1,3*n);
vy=zeros(2*m+1,3*n);
vz=zeros(2*m+1,3*n);
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);
for t=1:10000
C=-[(N*vy)/(2*yy)]-yita/yy^2;D=1/tt+2*yita/yy^2;E=[(N*vy)/(yy^2)]-yita/yy^2;
F=[(N*(vz+R))/(2*zz)]+yita/zz^2;
G=1/tt-(2*yita)/zz^2;
H=-[(N*(vz+R))/(2*zz)]+yita/zz^2;
A1=zeros(2*m+1);
for j=1:n
i=m;
while i*yy>sqrt(A)-sqrt(A-j*zz)
i=i-1;
end
A1(1+m-i,j)=1;
A1(1+m+i,j)=1;
for k=2+m-i:m+i
A1(k,k-1)=C(k,k-1);A1(k,k)=D(k,k);A1(k,k+1)=E(k,k+1);
end
Xj=X(:,j);
Y=zeros(2*m+1,1);
for f=2+m-i:m+i
Y(f,1)=F(i,j-1)*X(i,j-1)+G(i,j)*X(i,j)+H(i,j+1)*X(i,j+1)-seta*(B^2)*X(i,j);
end
Xj=Y/A1;
end
Xj=                     (这边我想输出Xj的结果,怎么弄啊?)
end
X=                      (这边我想输出X的结果)

geoer 发表于 2007-1-19 14:43

第10行D=1/tt+2*yita/yy^2;
>> D

D = 2000100
是一个具体的数
第23行A1(k,k)=D(k,k);而 k=2+m-i:m+i,其中m等于236,i=m
while....
i=i-1
end
比较混乱,不知道你要解决的是什么问题?
还有文档最好规范化,到处是end,很容易就把人搞糊涂了。

xjzuo 发表于 2007-1-19 15:17

回复

建议将问题用word文档传上来.
另:你的数组和数好象搞混了,seta好象也没有定义.
%%%问题不讲清楚,恐怕很难有人能回答你.

[ 本帖最后由 xjzuo 于 2007-1-19 18:40 编辑 ]

huangxuemei513 发表于 2007-1-19 18:30

我要解决的问题是二维。在由z1=A-^2 和z2=A-^2 和y= 以及z=3*A围成的共同区域上,解一个N-S方程。这是我第一次编程,然后origin不会用,只能用苍白的语言说了。A是一个定值,A=5.
i=m;
while i*yy>sqrt(A)-sqrt(A-j*zz)
i=i-1;
end
这段程序是为了在z1和z2之间确定边界。
然后调试有没有什么特殊的方法和技巧啊?THANK YOU!

eight 发表于 2007-1-19 18:59

强烈建议仔细检查,你的D是一个数,但是却用D(k,k)来引用,这么复杂的程序还是你自己才能看懂

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

happy 发表于 2007-1-21 13:47

原帖由 huangxuemei513 于 2007-1-19 18:30 发表
我要解决的问题是二维。在由z1=A-^2 和z2=A-^2 和y= 以及z=3*A围成的共同区域上,解一个N-S方程。这是我第一次编程,然后origin不会用,只能用苍白的语言说了。A是一个定值,A=5.
i=m;
while i*yy>sqrt(A)- ...

仔细看运行过程中出现的错误提示
matlab这一点做得还是不错的,错误信息比较详细
页: [1]
查看完整版本: 矩阵索引超出大小限制,检查好多遍也没有发现问题,帮忙啊!OTL