trying to loop for transfer function plots into single figure

Parameters========================
Km1 = 0.01;
Km2 = 0.02257;
Km3 = 0.04;
Rm = 2.093;
b = 0.0000262;
t = 0.069;
T=0:0.0001:4;
========================================
something I tried, but It didnt work
for i :1:3
K(i) = Km(i)/(Rm*b+Km(i)^2);
oltf(i)=tf([K(i)],[t,(i)]);
step(i)=step(oltf(i),T);
plot(T, step(i),'r');
end
trying to fit all three plots into one figure
Thank you!!

 Accepted Answer

%Do not name variables dynamically
%defining them in an array and using indexing is a much better option
Km = [0.01 0.02257 0.04];
Rm = 2.093;
b = 0.0000262;
t = 0.069;
T = 0:0.0001:4;
%Defining K via vectorization
K = Km./(Rm.*b+Km.^2);
%Initialise a figure and use hold on to retain plots on the same axes
figure
hold on
for i =1:3
oltf = tf([K(i)],[t,(i)]);
step(oltf,T)
%%It's not a good idea to use function names as variables names
%step(i)=step(oltf(i),T);
%%No need to use the plot command, as the step command itself outputs a plot
%plot(T, st(i),'r')
end
hold off

4 Comments

There is a problem with this solution that the K (aplitude is not reflecting to the actual) eg
K@(0.02257) = Km./(Rm.*b+Km.^2) = 0.02257 / (2.093 *0.0000262 + 0.02257^2 ) = 40 ( but on the actual response from the plot the gain is at only half of it (20)
can you see the problem>?
@Dyuman Joshi didn't make any mistakes in the code because he merely duplicated the transfer function from your original code. However, based on your screenshot, I would like to suggest that the correct transfer function should be:
It's perfectly fine to notify him about the issue you had.
Km1 = 0.01;
Km2 = 0.02257;
Km3 = 0.04;
Km = [Km1 Km2 Km3];
Rm = 2.093;
b = 0.0000262;
t = 0.069;
T = 0:0.0001:4;
for i = 1:3
K = Km(i)/(Rm*b + Km(i)^2);
den = [t, 1]; % <-- fix denominator here
oltf = tf(K, den);
step(oltf, T), hold on
end
grid on
hold off

Sign in to comment.

More Answers (0)

Tags

Community Treasure Hunt

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

Start Hunting!