Plotting inside for loop using if
이전 댓글 표시
Hello, I am trying to plot a formula in which if the input does not follow the constraint, calculation process change.I am trying to do this with if inside a for loop.My script is below.It works for single x values but It does not work for all the x values from 0 to 1 with increments of 0.01.Could anyone please fix the error I do here?
G=200; %mass flux[kg/m^2*s]
Pred=0.31052; %reduced pressure
M=44.01; %moleculer weight
q=10000; %heat flux
gv=60.72775526; %density of vapor phase
gl=1008.003926; %density of liquid phase
g=9.81; %gravitational acceleration
sig=7.53*10^-3; %surface tension
vv=1.34741*10^-5; %viscosity of vapor phase
vl=1.28*10^-4; %viscosity of liquid phase
kl=0.128582692; %conductivity of liqud phase
kv=0.0137; %conductivity of vapor phase
hlv=236272.0191; % enthalpy of vaporization
D=0.0061; %inside diameter
Pr=2.2231; % prandtl number for liquid flow
cpv=1387.633317; %specific heat of vapor phase
for x=0.1:0.01:0.9; %dry coefficient[-]
Bo=q./(G.*hlv);
Bd=(g.*(gl-gv).*D.^2)./sig;
Rel=(G.*(1.-x).*D)./vl;
x_critical=38.27.*Rel.^2.12.*(1000.*Bo).^1.64.*Bd.^-4.7;
if x< x_critical
E=(1.+9.36.*10^3.*x.*Pr.*((gl./gv)-1)).^0.11;
S=1./(1+0.00000162.*E.^0.69.*Rel.^1.11);
hl=0.023.*Rel.^0.8.*Pr.^0.4.*(kl./D);
hnb=55.*Pred.^0.12.*(-log10(Pred)).^-0.55.*M.^-0.5.*q.^0.67;
htp_yoon=((S*hnb).^2+(E.*hl).^2).^0.5;
plot(x,htp_yoon)
hold on
else
Rel=(G.*(1-x).*D)./vl;
Rev=(G.*x.*D./vv);
hv=0.023.*Rev.^0.8.*(cpv.*vv./kv).^(0.4).*(kv./D);
E=1+3000.*Bo.^0.86+1.12.*(x./(1-x)).^0.75.*(gl./gv).^0.41;
hl=0.023.*Rel.^0.8.*Pr.^0.4.*(kl./D);
Xtt=((1.-x)./x).^0.9.*(gv./gl).^0.5.*(vl./vv).^0.1;
theta=2*pi*(36.23.*Rel.^3.47.*Bo.^4.84.*Bd.^-0.27.*(1./Xtt).^2.6);
hwet=E.*hl;
htp_yoon=((theta.*hv)+(2*pi-theta).*hwet)./(2*pi);
plot(x,htp_yoon)
hold on
end
end
댓글 수: 7
dpb
2017년 5월 9일
Doesn't appear to be anything untoward in the code; what, specifically, do you think is a problem?
Use the debugger and step through at the point in question...
@Berkay Cinar: Just a note: 9.36e3 is a cheap constant while 9.36.*10^3 is an expensive power operation and a multiplication.
Please mention, what the problem is. How do you see that "It does not work for all the x values"?
The code does not work for "all the x values from 0 to 1" because the loop runs over "0.1:0.01:0.9" only.
dpb
2017년 5월 9일
Good catch on the loop limits, Jan...didn't notice that.
KSSV
2017년 5월 9일
Try plot(x,htp_yoon,'.')
dpb
2017년 5월 9일
Oh, yeah, that too...he'd be better off building the whole output then plotting instead of inside the loop...
Berkay Cinar
2017년 5월 9일
dpb
2017년 5월 10일
Hmm....not sure where the code changed from what I copied prior time, but I also get that for the breakpoint now...
But, your plotting problem has to do with how you've structured the loop; by having only one point at a time, all you get is a dot on the screen that isn't visible because it isn't large enough. To see this, try changing your current plotting instruction to
plot(x,htp_yoon,'x','color','k')
and you'll see that before it did plot, you just couldn't seen the tiny little one-pixel dots.
But, the easier way is still to save up the computed array and plot in the end; you'll probably want those values for other purposes, anyway, won't you?
Anyway, the general idea is
- make the range x values a vector and iterate over it in counted loop instead of using it as the loop value
- create array for htp_yoon to match x
- modify all references to variable x to use the subscripted value instead of the whole array reference
- move the plotting to when you're otherwise done...
I fixed up the code in Answer to match; what I forgot before was that x was only a single value instead of the vector because you had used it for the iterator...
채택된 답변
추가 답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 Thermal Liquid Library에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!