How to fix a graph with loop
1 view (last 30 days)
Show older comments
Sorry, I am new to MATLAB, so bear with me. I am trying to plot a graph which shows me the values of Y_B for T = 600:10:850, where k1, k2 and k3 vary with T. Instead, I am given a blank graph with only 599 to 601 on the x axis. Heres my matlab code
MATLAB code
for i = 1:25
T(i) = 600+10i;
k1(i) = 10^7*exp(-12700/T(i));
k2(i) = 5*10^4*exp(-10800/T(i));
k3(i) = 7*10^7*exp(-15000/T(i));
t = 0.2;
Y_B(i) = (k1(i)*t*(k1(i)+k3(i)))/(((k2(i)*t)+1)*(k1(i)+k3(i))*(1+(t*(k1(i)+k3(i)))));
end
plot(T(i),Y_B(i));
0 Comments
Accepted Answer
Birdman
on 31 Jan 2018
You do not need for loop:
T=600:10:850;
t = 0.2;
k1 = 10^7.*exp(-12700./T);
k2 = 5*10^4.*exp(-10800./T);
k3 = 7*10^7.*exp(-15000./T);
Y_B = (k1.*t.*(k1+k3))./(((k2.*t)+1).*(k1+k3).*(1+(t.*(k1+k3))));
plot(T,Y_B);
7 Comments
Jan
on 31 Jan 2018
@sophp: Remember that [] is the operator for a vertical or horizontal concatenation. While 1:2:20 is a vector, concatenating it with nothing by [1:2:20] replies a vector again. Therefore both produce exactly the same object.
It is not easy to suggest an improvement, because I cannot imagine why you want to assign a vector to the scalar t(i). Most of all the vector is static and does not depend on the loop, so why assigning it in each iteration? What about:
t = 1:2:20;
T = 600:10:850;
for i=1:numel(T)
k1(i) = 1e7 .* exp(-12700 ./ T(i));
k2(i) = 5e4 .* exp(-10800 ./ T(i));
k3(i) = 7e7 .* exp(-15000 ./ T(i));
Y_B = (k1(i) .* t .* (k1(i)+k3(i))) ./ (((k2(i).*t)+1) .* ...
(k1(i)+k3(i)) .* (1+(t(i) .* (k1(i)+k3(i)))));
plot(t, Y_B);
end
I'm not sure if this is what you want. But it is very similar to Bordman's code, which you have accepted already.
More Answers (0)
See Also
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!