# how to write a for loop for the following task?

4 views (last 30 days)
Ivy Shen on 16 Sep 2018
Commented: Walter Roberson on 17 Sep 2018
Known:
Kp(1)=a;
Then:
x = roots([Kp-1 7.56*Kp -18.12*Kp 9.56*Kp]); (we only need 0<x<1).
T = roots([-0.001273*x+0.00365 0.544*x+44.3191 283338.4*x-407295]);
mu_CO2 = -394088+44.3191*(T-298-T*ln(T/298))-0.0073/2*(T-298)^2-213.984*T;
mu_CO = -110700+29.6127*(T-298-T*ln(T/298))-0.00301/2*(T-298)^2-197.81*T;
mu_O2 = 30.5041*(T-298-T*ln(T/298))-0.00349/2*(T-298)^2-205.31*T;
Kp_new = exp(-(mu_O2+2*mu_CO-2*mu_CO2)/(8.314*T));
Finally, I need to use Kp_new to calculate new x, new T, new mu. The iteration number is supposed to be 20.
I will appreciate if someone can help me on this problem!

Ivy Shen on 17 Sep 2018
Thank you! I revised the code again as following. Actually, what I want to get from the code is the x value when Kp does not change much (in other words, when the solution converges). Do you think this code works correctly?
Kp(1) = 7.75*10^(-4);
for i = 2:21
x_root = roots([Kp(i-1)-1 7.56*Kp(i-1) -18.12*Kp(i-1) 9.56*Kp(i-1)]);
x(i-1) = x_root(x_root>0 & x_root<1);
T_root = roots([-0.001273*x(i-1)+0.00365 0.544*x(i-1)+44.3191 283338.4*x(i-1)-407295]);
T = T_root(T_root>0);
mu_CO2 = -394088+44.3191*(T-298-T.*log(T/298))-0.0073/2*(T-298).^2-213.984*T;
mu_CO = -110700+29.6127*(T-298-T.*log(T/298))-0.00301/2*(T-298).^2-197.81*T;
mu_O2 = 30.5041*(T-298-T.*log(T/298))-0.00349/2*(T-298).^2-205.31*T;
Kp(i) = exp(-(mu_O2+2*mu_CO-2*mu_CO2)/(8.314*T));
end
Walter Roberson on 17 Sep 2018
You should change
x(i-1) = x_root(x_root>0 & x_root<1);
to
x(i-1) = x_root(imag(x_root) == 0 & x_root>0 & x_root<1);
Walter Roberson on 17 Sep 2018
Last night I tried finding the range of Kp values that left x_root in the range 0 to 1. It turned out that for 0 exactly, the solutions were 0 and 3775/7744 with that second value being an isolated real-valued spot in the middle of complex-valued Kp solutions. It also turned out that due to discontinuities, there were no finite values of Kp that made any of the x_root values exactly 1, but infinite Kp made it one (that is, the values were greater than one for finite values but converged to one at infinity.)

R2016b

### Community Treasure Hunt

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

Start Hunting!