24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 2398  |  回复: 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的回帖
回帖置顶 ( 共有1个 )

百里道

木虫 (初入文坛)

百里道: 回帖置顶 2012-10-28 08:52:42
引用回帖:
15楼: Originally posted by csgt0 at 2012-10-26 15:33:25
子程序写算一个点的值那么就用一个点的坐标传进去就行,不用把整个的u都传进去
function feq=result(p,rho1)
N=9;
w=;
e=;
for n=1:N
    eu=e(n,1)*p(1)+e(n,2)*p(2);
    uv=p(1)^2+p(2)^2;
    feq( ...

按上面你说的可不可以认为feq在子程序只与n有关,所以在主程序调用的时候都要写成feq(i,j,,而不是feq(i,j,n)?
可是这样的胡,后面的程序
for i=2:I
    for j=2:J
        for n=1:N
          ip=i-e(n,1);
          jp=j-e(n,2);
          p=[u(ip,jp,1),u(ip,jp,2)];
          rho1=rho(ip,jp);
          F(i,j,=f(ip,jp,+(result(p,rho1)-f(ip,jp,)/tau;
        end
    end
end
运行后会出现
??? Error using ==> minus
Matrix dimensions must agree.

Error in ==> LBGK_D2Q9_liddrivenflow at 44
          F(i,j,=f(ip,jp,+(result(p,rho1)-f(ip,jp,)/tau;

提示矩阵维数不一致,是不是说f(i,j,n)是三维的,而调用的feq(n)是一维的,这样的话怎么把feq变为三维数组?
不知道我的理解对不对?怎么样才能把feq变成三维数组?

还有一个问题,如果把主程序的这部分改为
for i=2:I
    for j=2:J
        for n=1:N
          ip=i-e(n,1);
          jp=j-e(n,2);
          p=[u(ip,jp,1),u(ip,jp,2)];
          rho1=rho(ip,jp);
          F(i,j,n)=f(ip,jp,n)+(result(p,rho1)-f(ip,jp,n))/tau;
        end
    end
end
提示出现错误
??? Assignment has more non-singleton rhs dimensions than non-singleton
subscripts

Error in ==> LBGK_D2Q9_liddrivenflow at 44
          F(i,j,n)=f(ip,jp,n)+(result(p,rho1)-f(ip,jp,n))/tau;

这句是什么意思?
==
16楼2012-10-27 09:53:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

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的回帖

百里道

木虫 (初入文坛)

改为这样
%Initialization
F=zeros(I,J,N); f=zeros(I,J,N);u=zeros(I,J,2);rho=zeros(I,J);
for i=1:I+1
    for j=1:J+1
        u(i,j,1)=0;u(i,j,2)=0;
        rho(i,j)=rho0;
        u(i,J+1)=U;
        for n=1:N
            feq(i,j,n)=result(u,n,rho(i,j));
            f(i,j,n)=feq(i,j,n);
        end
    end
end
。。。。。。。。
function feq=result(u,n,rho)
% double eu,uv,feq;
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];
I=256;J=256;
N=length(w);
for i=1:I-1
    for j=1:J-1
        for n=1:N
          eu=e(n,1).*u(i,j,1)+e(n,2).*u(i,j,2);
          uv=u(i,j,1).*u(i,j,1)+u(i,j,2).*u(i,j,2);
          feq=w(n)*rho*(1+3*eu+4.5*eu.*eu-1.5*uv);
        end
    end
end
还是busy
ctrl+c后出现
??? Operation terminated by user during ==> LBGK_D2Q9_liddrivenflow>result at 94

In ==> LBGK_D2Q9_liddrivenflow at 25
            feq(i,j,n)=result(u,n,rho(i,j));


我觉得是调用函数这里除了问题,自己写的feq,不知道错在哪里,请指教!
==
5楼2012-10-24 09:38:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

csgt0

荣誉版主 (著名写手)

彩色挂图

【答案】应助回帖

感谢参与,应助指数 +1
你这程序几个问题,除了函数调用格式,主要是n的问题。
showmethemoney
6楼2012-10-24 13:33:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

百里道

木虫 (初入文坛)

feq(i,j,n)=result(u,n,rho(i,j));
这句调用怎么改?n的问题,我不太明白,请详细指教
==
7楼2012-10-24 16:23:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

csgt0

荣誉版主 (著名写手)

彩色挂图

【答案】应助回帖

你的n没有用,在第二个函数里n又从1被赋值了。然后你循环那么多次算feq,最后只用到一个feq。先理清楚调用的函数要什么输入,得到什么输出再在主函数里用。
showmethemoney
8楼2012-10-24 17:27:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

百里道

木虫 (初入文坛)

引用回帖:
8楼: Originally posted by csgt0 at 2012-10-24 17:27:13
你的n没有用,在第二个函数里n又从1被赋值了。然后你循环那么多次算feq,最后只用到一个feq。先理清楚调用的函数要什么输入,得到什么输出再在主函数里用。

已知是点(i,j)处的水平速度u1和竖直速度u2、该点的密度rho(速度和密度都与位置有关),求该点在n方向的feq函数
比如,在i=1,j=1处,n=2时
eu=1*u1+0*u2;uv=u1^2+u2^2;feq=1/9*rho*(1+3*eu+4.5*eu.*eu-1.5*uv);
不知道我说清楚了没,十分感谢指正!
计算出各个点的feq,程序的其他地方还要用到feq,所以觉得使用函数调用比较好
==
9楼2012-10-25 09:28:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

csgt0

荣誉版主 (著名写手)

彩色挂图

【答案】应助回帖

按你的意思我理解是对应一个(i,j),有两个速度u(i,j,1),u(i,j,2),对应8个方向,分别是w的8行,因此一个点应该计算得到8个feq
所以子函数写成function result=feq(u,rho)
其中一句改成feq(i,j,n)=w(n)*rho*(1+3*eu+4.5*eu.*eu-1.5*uv);
这样你在主函数里就不用再循环了。此外,其实用矩阵计算可以少用循环的,会快些。
showmethemoney
10楼2012-10-25 09:42:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 百里道 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 0703调剂,一志愿天津大学319分 +8 haaaabcd 2026-04-05 8/400 2026-04-06 06:16 by houyaoxu
[考研] 081700,311,求调剂 +14 冬十三 2026-04-04 15/750 2026-04-06 01:57 by BruceLiu320
[考研] 294求调剂 +4 Grey_Ey 2026-04-01 5/250 2026-04-05 23:05 by Grey_Ey
[考研] 求调剂 +11 熊二想上岸 2026-04-04 11/550 2026-04-05 22:21 by 醉翁wl
[考研] 085600,320分求调剂 +7 大馋小子 2026-04-01 8/400 2026-04-05 21:19 by 学员8dgXkO
[考研] 295求调剂 +8 FZAC123 2026-04-03 8/400 2026-04-05 17:46 by 蓝云思雨
[考研] 313求调剂 +5 海日海日 2026-04-04 5/250 2026-04-05 15:52 by jndximd
[考研] 085600调剂 +9 东照照照 2026-04-04 9/450 2026-04-05 13:44 by ujn_zhuj
[考研] 一志愿华中农业大学0710(A)初试329分 求调剂 +4 一名26考研生 2026-04-04 4/200 2026-04-05 10:01 by barlinike
[考研] 材料化工306分找合适调剂 +14 沧海轻舟e 2026-04-04 14/700 2026-04-05 09:53 by 朱云虎202
[考研] 283求调剂 +10 A child 2026-04-04 10/500 2026-04-05 08:22 by qlm5820
[考研] 278求调剂 +3 依旧! 2026-04-02 4/200 2026-04-04 20:27 by 蓝云思雨
[考研] 调剂0855-288 +5 x熊二a 2026-04-03 5/250 2026-04-04 00:19 by 猪会飞
[考研] 305求调剂 +3 77Qi 2026-04-03 3/150 2026-04-03 23:01 by qzxyhcsy
[考研] 285求调剂 +5 AZMK 2026-04-03 8/400 2026-04-03 18:17 by AZMK
[考研] 建环,能源,土木老师路过看一看!!! +5 嘿嘿uu 2026-04-01 5/250 2026-04-03 11:47 by znian
[考研] 311求调剂 +14 蓝月亮亮 2026-03-30 14/700 2026-04-02 12:18 by 1753564080
[考研] 284求调剂 +12 小熊~~ 2026-03-31 12/600 2026-04-01 20:23 by 花??
[考研] 262求调剂 +7 ZZ..000 2026-03-30 8/400 2026-03-31 10:05 by cal0306
[考研] 370求调剂 +3 080700调剂 2026-03-30 3/150 2026-03-31 01:09 by A_Zhe
信息提示
请填处理意见