24小时热门版块排行榜    

查看: 2281  |  回复: 19
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

百里道

木虫 (初入文坛)

[求助] matlab函数调用与数组的问题

for i=1:I
    for j=1:J
        for n=0:N-1
            f(i,j,n)=feq(u,n,rho);
        end
    end
end

function result=feq(u,n,rho)   
   %u(i,j,1)是坐标位置为(i,j)处的水平速度,u(i,j,2)是竖直方向的速度
w=[4/9,1/9,1/9,1/9,1/9,1/36,1/36,1/36,1/36];
e=[0,0;1,0;0,1;-1,0;0,-1;1,1;-1,1;-1,-1;1,-1];
for i=1:I-1
    for j=1:J-1
        for n=1:N
          eu=e(n,1).*u(:,:,1)+e(n,2).*u(:,:,2);
          uv=u(:,:,1).*u(:,:,1)+u(:,:,2).*u(:,:,2);
   %uv是水平方向与竖直方向速度的平方和
          result=w(n)*rho*(1+3*eu+4.5*eu.*eu-1.5*uv);
        end
    end
end
feq这么调用对不?eu和uv的写法对不?
本人初学,函数调用数组这方面不明白,请指点
回复此楼
==
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

csgt0

荣誉版主 (著名写手)

彩色挂图

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★
百里道: 金币+9, ★★★很有帮助 2012-10-31 15:32:12
这是你的三维矩阵维度的问题,
result(p,rho1)算出来的是一个行向量,放到三维矩阵中应该是用A=(i,:,j)来表示的
所以你跟他加减的项应该也是这样的,为了方便一般都用列向量放第一个最方便。
另外你这一句的问题,F(i,j,n),f(ip,jp,n)都是一个数,而result(p,rho1)是一列数,你把一列数赋值给一个数当然报错。
F(i,j,n)=f(ip,jp,n)+(result(p,rho1)-f(ip,jp,n))/tau;
最好的方法是
CODE:
F(:,i,j)=f(:,ip,jp)+(result(p,rho1)'-f(:,ip,jp))/tau;

其中把你的计算结果按列排放就好了。result这个转置可以在子程序里做就可以了。

作为测试,你试试以下程序就明白了
[code]
t1=1:5;
t2=t1';
A1(6,7,=t1;   %t1各元素分别对应每层的(6,6)元素
A2(6,:,7)=t1;   %t1各元素对应第7层的第6行
A3(:,6,7)=t2;   %t2各元素对应第7层的第6列

A1(6,7,-t1   %报错,三维矩阵第3个指数不能直接跟行列向量计算
A2(6,:,7)-t1  %不报错,A2第7层第6行减去行向量t1
A2(:,5,7)-t1  %报错,A2第7层第5列是列向量,不能减去行向量t1
A2(:,5,7)-t2  %报错,A2第7层第5列是列向量,但是有6行,不能减去5行的t2
A2(1:5,5,7)-t2  %不报错,A2第7层第5列是列向量,但是有6行,取前5行可以减去5行的t2
A3(:,6,7)-t2  %不报错
A3(5,:,7)-t2  %报错,A3第7层第5行为6的行向量,t2为列向量,长度不同
A3(5,1:5,7)-t2  %报错,改为长度相同,但是一个行向量,一个列向量,不能减
[code]
showmethemoney
17楼2012-10-30 17:17:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 20 个回答

BlueAsia

新虫 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
直接输入到matlab里让计算机帮你找错误,对的话就能得到正确结果了呀
2楼2012-10-22 19:02:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

百里道

木虫 (初入文坛)

引用回帖:
2楼: Originally posted by BlueAsia at 2012-10-22 19:02:35
直接输入到matlab里让计算机帮你找错误,对的话就能得到正确结果了呀

程序比较长,所以没贴出来,程序运行一直是busy状态,不知道循环哪里出了问题。
==
3楼2012-10-23 08:28:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

BlueAsia

新虫 (小有名气)

【答案】应助回帖


jjdg: 金币+1, 感谢参与 2012-10-24 10:13:51
引用回帖:
3楼: Originally posted by 百里道 at 2012-10-23 08:28:36
程序比较长,所以没贴出来,程序运行一直是busy状态,不知道循环哪里出了问题。...

可以考虑把源程序分步运行,看看问题出在哪个点上
4楼2012-10-23 09:16:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见