Help with "While" loop, not sure what I'm doing
1 次查看(过去 30 天)
显示 更早的评论
I have started learning to use Matlab, I have a program that a colleague of mine has written for processing my data and I can't figure out why some of the script is not working. In the following loop, the first equation (RHlsun) uses the original value of glsuni istead of the new value from the loop. I hope this makes sense. What am I doing wrong?
counter = 0;
glsuni = 0.5;
glsun = 0.0;
converge1 = abs(glsuni - glsun);
while converge1>0.0005;
RHlsun = 1 - (1 - (RH / 100)) .* (((2 * glsuni * ((fgreen * fdry) / fstomata)) .* gvl .* (gbc ./ LAIsun)) ./ ((2 * glsuni .* ((fgreen * fdry) / fstomata)) .* ((2 * glsuni .* ((fgreen * fdry) / fstomata)) .* gvl + (2 * glsuni .* ((fgreen * fdry) / fstomata)) .* (gbc ./ LAIsun) + gvl .* (gbc ./ LAIsun))));
sRHlsun = (sqrt((RHlsun.^2) + (RHlmin^2))) ./ (sqrt(1 + (RHlmin^2)));
CO2lsun = CO2i - (CO2i - CO2a) * (((2 * 0.625 * glsuni * ((fgreen * fdry) / fstomata)) .* gcl .* (gbc ./ LAIsun)) ./ ((2 * 0.625 * glsuni * ((fgreen * fdry) / fstomata)) .* ((2 * 0.625 * glsuni .* ((fgreen * fdry) / fstomata)) .* gcl + (2 * 0.625 * glsuni * ((fgreen * fdry) / fstomata)) .* (gbc ./ LAIsun) + gcl .* (gbc ./ LAIsun))));
glsun = mBWB .* ((Ansun .* sRHlsun) ./ CO2lsun) + bBWB;
counter = counter + 1;
converge1 = abs(glsuni - glsun);
glsuni = glsun;
if counter > 30;
break;
end;
end;
2 个评论
Tom
2012-8-16
That equation is processed before the counter=counter+1 line, so maybe move the counter to the top of the loop?
采纳的回答
Jan
2012-8-18
编辑:Jan
2012-8-18
Start with a simplification of the code:
counter = 0;
glsuni = 0.5;
glsun = 0.0;
converge = abs(glsuni - glsun);
c1 = (fgreen * fdry) / fstomata;
c4 = gbc ./ LAIsun;
while converge > 0.0005 || counter > 30
c2 = 2 * glsuni * c1;
c3 = c2 * 0.625;
RHlsun = 1 - (1 - (RH / 100)) ./ (c2 ./ c4 + c2 ./ gvl + 1);
sRHlsun = sqrt(RHlsun .^ 2 + RHlmin ^ 2) ./ sqrt(1 + RHlmin ^ 2);
CO2lsun = CO2i - (CO2i - CO2a) ./ (c3 ./ c4 + c3 ./ gcl + 1);
glsun = mBWB .* Ansun .* sRHlsun ./ CO2lsun + bBWB;
converge = abs(glsuni - glsun);
glsuni = glsun;
counter = counter + 1;
end
Perhaps this allows you to see the problem by your own.
0 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!