MATLAB Answers

how to write a for loop for the following task?

4 views (last 30 days)
Ivy Shen
Ivy Shen on 16 Sep 2018
Commented: Walter Roberson on 17 Sep 2018
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
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));
Walter Roberson
Walter Roberson on 17 Sep 2018
You should change
x(i-1) = x_root(x_root>0 & x_root<1);
x(i-1) = x_root(imag(x_root) == 0 & x_root>0 & x_root<1);
Walter Roberson
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.)

Sign in to comment.

Answers (0)





Community Treasure Hunt

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

Start Hunting!