Matlab函数可以返回向量吗?

6tdlim6h  于 7个月前  发布在  Matlab
关注(0)|答案(1)|浏览(136)

我在写一个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
ugmeyewa

ugmeyewa1#

当以简洁的方式编写公式时,MATLAB与许多编码语言相比具有一定的优势。

1.-很可能不需要这2个FOR循环

因为你没有显示任何东西,但这2个for循环,至少通过他们的方式,你把它,在MATLAB中,这两个可以避免:
我再说一遍,很可能没有必要

for i=1:1:M
for j=1:1:N 
..

end
end

只需执行以下操作

2.-确保在定义rhou时使用了正确的大小,这样它们的产品就不会返回大小不匹配的结果

[sz1 sz2]=size(rho);
[sz3 sz4]=size(u);

sz1==sz4

sz2==sz3

都是真的

3.-定义F

F=zeros(sz1,sz1,4)

现在,而不是

F(1,i,j)=rho(i,j)*u(i,j);

F=(:,:,1)=rho*u

如果prod(size(rho)==size(u))>0意味着rhou的所有大小值都相等,也许你必须做元素到元素乘积,
F=(:,:,1)= ρ *u
而不是

F(2,i,j)=rho(i,j)*(u(i,j)^2)+p(i,j);

F(:,:,2)=rho.*(u.^2)+p;

F(:,:,2)=rho*(u.^2)+p;

而不是

F(3,i,j)=rho(i,j)*u(i,j)*v(i,j);

F(:,:,4)=rho.*u.*v;

F(:,:,4)=rho*u*v;

如果所有尺寸都允许,
而不是

F(4,i,j)=rho(i,j)*u(i,j)*(e(i,j)+((V(i,j)^2)/2))+p(i,j)*u(i,j);

F(:,:,4)=rho.*u.*(e+((V.^2)/2))+p.*u;

或简单

F(:,:,4)=rho*u*(e+((V.^2)/2))+p*u;

如果所有尺寸都允许的话。

相关问题