1 view (last 30 days)

Hi, I'm utterly perplexed as to why the following while loop will not terminate. Any help would be appreciated.

CO2percentout1 = 1:1000;

CO2percentout1(:)=0;

CO2percentout1(1) = CO2_percent_feed-.6*CO2_percent_feed;

CO2percentout2 = CO2_percent_feed-.5*CO2_percent_feed;

CO2percentout3 = CO2_percent_feed-.3*CO2_percent_feed;

i=2;

c1 = 1:49;

c2 = 1:49;

c3 = 1:49;

while abs(CO2percentout1(i) - CO2percentout1(i-1)) > 0.001

[CO2percentout1(i),Algae_in_2,c1] = stage1(CO2percentout2,V1,tot_gas_flow,Height1,C01,Water_flow);

[CO2percentout2,Algae_in_3,c2]=stage2(CO2percentout3,V2,tot_gas_flow, Height2, C02,Water_flow,Algae_in_2);

[CO2percentout3,Algae_Product,c3] =stage3(CO2_percent_feed,V3,tot_gas_flow,Height3,C03,Water_flow,Algae_in_3);

i=i+1;

end;

the values of CO2percentout1 for 30 iterations are the following:

0.400000000000000 0.496842690178588 0.577390642895070 0.658829848072415 0.658142131647976 0.658142519746066 0.658142563142344 0.658142562747119 0.658142562747534 0.658142562747550 0.658142562747550 0.658142562747550 0.658142562747550 0.658142562747550 0.658142562747550 0.658142562747550 0.658142562747550 0.658142562747550 0.658142562747550 0.658142562747550 0.658142562747550 0.658142562747550 0.658142562747550 0.658142562747550 0.658142562747550 0.658142562747550 0.658142562747550 0.658142562747550 0.658142562747550 0.658142562747550

Moe_2015
on 24 Jun 2016

Edited: Moe_2015
on 24 Jun 2016

I think what you need to do is the following (by the way, I don't know what your code is doing but I think it should be > 0.001 not <):

i = 1;

CO2percentout1(i) = 0; %or whatever starting value here

difference = 1; %just an arbitrary value above 0.001

while difference > 0.001

i = i + 1;

[CO2percentout1(i),Algae_in_2,c1] = stage1(CO2percentout2,V1,tot_gas_flow,Height1,C01,Water_flow);

[CO2percentout2,Algae_in_3,c2]=stage2(CO2percentout3,V2,tot_gas_flow, Height2, C02,Water_flow,Algae_in_2);

[CO2percentout3,Algae_Product,c3] =stage3(CO2_percent_feed,V3,tot_gas_flow,Height3,C03,Water_flow,Algae_in_3);

difference = abs(CO2percentout1(i) - CO2percentout1(i-1));

end

Moe_2015
on 24 Jun 2016

ok based on your updated code I would do this:

CO2percentout1 = 1:1000;

CO2percentout1(:)=0;

CO2percentout1(1) = CO2_percent_feed-.6*CO2_percent_feed;

CO2percentout2 = CO2_percent_feed-.5*CO2_percent_feed;

CO2percentout3 = CO2_percent_feed-.3*CO2_percent_feed;

i=2;

c1 = 1:49;

c2 = 1:49;

c3 = 1:49;

difference = CO2percentout1(1);

while difference > 0.001

i = i + 1;

[CO2percentout1(i),Algae_in_2,c1] = stage1(CO2percentout2,V1,tot_gas_flow,Height1,C01,Water_flow);

[CO2percentout2,Algae_in_3,c2]=stage2(CO2percentout3,V2,tot_gas_flow, Height2, C02,Water_flow,Algae_in_2);

[CO2percentout3,Algae_Product,c3] =stage3(CO2_percent_feed,V3,tot_gas_flow,Height3,C03,Water_flow,Algae_in_3);

difference = abs(CO2percentout1(i) - CO2percentout1(i-1));

end;

Moe_2015
on 24 Jun 2016

Sign in to comment.

Walter Roberson
on 24 Jun 2016

What is the initial value of i, and what is CO2percentout1(i-1) for that initial i ?

With the values you post, I would expect the loop to never get started if i starts out less than about 4, but if it starts out greater than that then because the adjacent values are closer than 0.001, the loop will not stop. You appear to have defined a convergent algorithm and asked it to stop iterating when it does not converge. I suspect you want ">" rather than "<"

Sign in to answer this question.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.