使用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>
答案 0 :(得分:2)
这一行:Mx=(M1+M2)./2
在每次循环迭代时执行,即使在将新值分配给Mx之后也是如此。您需要将其移出循环,如下所示:
Mx=(M1+M2)./2
while Lstar<L
%other code here...
end
然后,当您将新值分配给Mx
时,它不会立即被旧值覆盖。