## Help with "While" loop, not sure what I'm doing

on 16 Aug 2012

### Jan Simon (view profile)

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;```

Nirmal

### Nirmal (view profile)

on 16 Aug 2012

What is the problem that you are having?

Tom

### Tom (view profile)

on 16 Aug 2012

That equation is processed before the counter=counter+1 line, so maybe move the counter to the top of the loop?

## Products

No products are associated with this question.

### Jan Simon (view profile)

on 18 Aug 2012
Edited by Jan Simon

### Jan Simon (view profile)

on 18 Aug 2012

```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.