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 个评论
Nirmal
Nirmal 2012-8-16
What is the problem that you are having?
Tom
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
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 个)

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by