我在写一个Matlab程序,根据麦科马克解计算超音速流。我想把代码分成几部分,以便更容易阅读和查找错误。我想在我的代码中使用函数,但为此我们必须使用8个向量,我不知道函数是否有可能在空间中循环计算并同时返回向量。在代码的当前状态下,它是通过一系列简单的循环来完成的。
我希望成为
function [F(1,i,j) F(2,i,j)...] = governing_equations(rho,v,u...)
这可能吗?
现在它的工作原理如书中所示,使用空间循环并计算网格中的点(i和j)
for i=1:1:M
for j=1:1:N
F(1,i,j)=rho(i,j)*u(i,j);
F(2,i,j)=rho(i,j)*(u(i,j)^2)+p(i,j);
F(3,i,j)=rho(i,j)*u(i,j)*v(i,j);
F(4,i,j)=rho(i,j)*u(i,j)*(e(i,j)+((V(i,j)^2)/2))+p(i,j)*u(i,j);
G(1,i,j)=rho(i,j)*v(i,j);
G(2,i,j)=rho(i,j)*u(i,j)*v(i,j);
G(3,i,j)=rho(i,j)*(v(i,j)^2)+p(i,j);
G(4,i,j)=rho(i,j)*v(i,j)*(e(i,j)+((V(i,j)^2)/2))+p(i,j)*v(i,j);
end
end
1条答案
按热度按时间ugmeyewa1#
当以简洁的方式编写公式时,MATLAB与许多编码语言相比具有一定的优势。
1.-很可能不需要这2个FOR循环
因为你没有显示任何东西,但这2个
for
循环,至少通过他们的方式,你把它,在MATLAB中,这两个可以避免:我再说一遍,很可能没有必要
只需执行以下操作
2.-确保在定义
rho
和u
时使用了正确的大小,这样它们的产品就不会返回大小不匹配的结果都是真的
3.-定义
F
现在,而不是
做
如果
prod(size(rho)==size(u))>0
意味着rho
和u
的所有大小值都相等,也许你必须做元素到元素乘积,F=(:,:,1)= ρ *u
而不是
做
或
而不是
做
或
如果所有尺寸都允许,
而不是
做
或简单
如果所有尺寸都允许的话。