我怎样才能在matlab中使用while循环?

时间:2015-10-23 14:04:57

标签: matlab

使用while循环时遇到问题。我的主要目标是在管长度超过要求的情况下模拟Fanno flow问题。这意味着我们必须在中间改变马赫数。我的代码如下。

clc
clear all
close all

P1=1;
T1=273;
Cf=0.005;
Dh=0.15;
G=1.4;
M1=3.0;

Lxstar=0;
M2=1;
Lx=0;
My=0;
Lystar=0;
tol=.001;
L = 6.0;
error=0;


fp = ((1-M1^2)/(G*M1^2))+((G+1)/(2*G))*log(((G+1)*M1^2)/(2*(1+(M1^2*(G-1)/(2)))))

Lstar=(fp*Dh)./(4*Cf)

while Lstar<L
Mx=(M1+M2)./2


    fp1=((1-Mx^2)/(G*Mx^2))+((G+1)/(2*G))*log(((G+1)*Mx^2)/(2*(1+(Mx^2*(G-1)/(2)))))

    Lxstar= (fp1*Dh)./(4*Cf)
    Lx= Lstar-Lxstar
    My=((sqrt((2+(G-1)*Mx.^2)/(2*G*Mx.^2-(G-1)))));
    fp2=((1-My^2)/(G*My^2))+((G+1)/(2*G))*log(((G+1)*My^2)/(2*(1+(My^2*(G-1)/(2)))))

    Lystar=(fp2*Dh)./(4*Cf)
   error= Lx+Lystar-L
   if error<=tol
       break

   else
       Diff=Lx+Lystar
       if Diff<L
           Mx=Mx+.01
       else
           Mx=Mx-.01
       end
   end
end

当我运行它顺利时 - 它会做我想要的一切但是一旦它改变了Mx它再次运行Mx = M1 + M2 / 2而不是校正的Mx = Mx + .01或Mx = Mx-.01 < / p>

1 个答案:

答案 0 :(得分:2)

这一行:Mx=(M1+M2)./2在每次循环迭代时执行,即使在将新值分配给Mx之后也是如此。您需要将其移出循环,如下所示:

Mx=(M1+M2)./2
while Lstar<L
  %other code here...
end

然后,当您将新值分配给Mx时,它不会立即被旧值覆盖。