Asked by Ivy Shen
on 16 Sep 2018 at 15:43

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!

Opportunities for recent engineering grads.

Apply Today
## 13 Comments

## Kaushik Lakshminarasimhan (view profile)

Direct link to this comment:https://www.mathworks.com/matlabcentral/answers/419247-how-to-write-a-for-loop-for-the-following-task#comment_611105

Instead of calling your variable as

Kp_new, just call itKp. And put the whole code starting from( x = ...) to(Kp = ...)inside aforloop.Look here for how to create 20 loops: https://www.mathworks.com/help/matlab/matlab_prog/loop-control-statements.html

## Ivy Shen (view profile)

Direct link to this comment:https://www.mathworks.com/matlabcentral/answers/419247-how-to-write-a-for-loop-for-the-following-task#comment_611108

Thank you! Shall I use i for all these variables everywhere? such as x(i),T(i),mu_co2(i)....

## Ivy Shen (view profile)

Direct link to this comment:https://www.mathworks.com/matlabcentral/answers/419247-how-to-write-a-for-loop-for-the-following-task#comment_611109

I tried, but it said that the subscripted assignment dimension mismatch for x.

## Kaushik Lakshminarasimhan (view profile)

Direct link to this comment:https://www.mathworks.com/matlabcentral/answers/419247-how-to-write-a-for-loop-for-the-following-task#comment_611114

You can just overwrite the variables. No need to store intermediate values as

x(i), T(i)etc. unless you want to look at the values in intermediate iterations.You're probably getting the error because you have multiple roots. You can retain the root between 0 and 1 using:

You many have to do the same thing for

Tif there are multiple roots.## Ivy Shen (view profile)

Direct link to this comment:https://www.mathworks.com/matlabcentral/answers/419247-how-to-write-a-for-loop-for-the-following-task#comment_611199

I am still not sure how can I make the for loop work. Where should I put the iteration index? If I just wrote from "x=.." to "Kp=..," I only get one value per time. How can I make it automatically calculate 20 times with the new Kp values?

## KSSV (view profile)

Direct link to this comment:https://www.mathworks.com/matlabcentral/answers/419247-how-to-write-a-for-loop-for-the-following-task#comment_611200

copy the whole code here...so that we can help you.

## Ivy Shen (view profile)

Direct link to this comment:https://www.mathworks.com/matlabcentral/answers/419247-how-to-write-a-for-loop-for-the-following-task#comment_611207

## KSSV (view profile)

Direct link to this comment:https://www.mathworks.com/matlabcentral/answers/419247-how-to-write-a-for-loop-for-the-following-task#comment_611230

This line giving you empty output....

## KALYAN ACHARJYA (view profile)

Direct link to this comment:https://www.mathworks.com/matlabcentral/answers/419247-how-to-write-a-for-loop-for-the-following-task#comment_611231

It seems problem arises in the following:

x = x_root(x_root>0 & x_root<1);

Check the following what does this statement mean-

## Walter Roberson (view profile)

Direct link to this comment:https://www.mathworks.com/matlabcentral/answers/419247-how-to-write-a-for-loop-for-the-following-task#comment_611235

On the first iteration, when i = 2, then x_root generates 3 roots, two of which are complex. The selection of only some of those narrows it down to one value for x. The root() for T_root then results in two roots. Neither of them is in the desired range, so T comes out empty. That gives you empty variables for the next several lines. You then write that empty content over the

entireKp array instead of just Kp(i) . But you cannot just assign into Kp(i) because you have only emptiness to write in.## Ivy Shen (view profile)

Direct link to this comment:https://www.mathworks.com/matlabcentral/answers/419247-how-to-write-a-for-loop-for-the-following-task#comment_611355

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?

## Walter Roberson (view profile)

Direct link to this comment:https://www.mathworks.com/matlabcentral/answers/419247-how-to-write-a-for-loop-for-the-following-task#comment_611449

You should change

to

## Walter Roberson (view profile)

Direct link to this comment:https://www.mathworks.com/matlabcentral/answers/419247-how-to-write-a-for-loop-for-the-following-task#comment_611452

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.