Functions only plotting out to x=5
4 views (last 30 days)
Show older comments
Ross Bickhart
on 11 Sep 2022
Answered: Star Strider
on 11 Sep 2022
I am attemping to plot 4 scenarios for oscillations, each scenario based on a different value of damping for the system. I think that I have generally accomplished that, but the plots only go out to x=5, and I think it would be helpful to show additional length in the x direction. What would be the best way to do so?
I thought perhaps I should enter "t = 0 : 0.1 : 10" just above the y= and fplot lines near the end of the loop, but received the error:
Error using *
Incorrect dimensions for matrix multiplication. Check that the number of columns in the first matrix matches the number of rows in the second matrix. To perform elementwise multiplication, use '.*'.
syms t C1 C2;
k=4;
m=2;
c_crit=2*sqrt(k*m);
c1=0.99*c_crit;
c2=0.25*c_crit;
c3=0.10*c_crit;
c4=0.02*c_crit;
F0=1;
omeganaught=sqrt(k/m);
omega=1;
for c=[c1 c2 c3 c4]
% calculate a and b and lambda for each iteration since we know c now
a=(m*(omeganaught^2-omega^2)/(m^2*(omeganaught^2-omega^2)^2+omega^2*c^2))*F0;
b=omega*c/(m^2*(omeganaught^2-omega^2)^2+omega^2*c^2)*F0;
lambda=c/(2*m);
% calculate phi and A now for each iteration now that a and b are known
A=sqrt(a^2+b^2);
phi=atan(b/a);
% now that we have phi, A, and lambda, can start solving for C1 and C2
% using IVs. Formulas for C1 and C2 derived on paper and typed in.
t=0;
C1=-A*cos(-phi);
C2=lambda*C1+A*sin(-phi);
clear t;
syms t;
y=exp(-lambda*t)*(C1*cos(omega*t)+C2*sin(omega*t)+A*cos(omega*t-phi));
fplot(t,y);
hold on;
end
axis([0 10 -0.2 0.2])
legend('0.99*c_c_r_i_t','0.25*c_c_r_i_t','0.10*c_c_r_i_t','0.02*c_c_r_i_t');
grid on
0 Comments
Accepted Answer
Star Strider
on 11 Sep 2022
To plot from 0 to 10, change the fplot call to:
fplot(y,[0 10]);
Then it works without further modification —
syms t C1 C2;
k=4;
m=2;
c_crit=2*sqrt(k*m);
c1=0.99*c_crit;
c2=0.25*c_crit;
c3=0.10*c_crit;
c4=0.02*c_crit;
F0=1;
omeganaught=sqrt(k/m);
omega=1;
figure
for c=[c1 c2 c3 c4]
% calculate a and b and lambda for each iteration since we know c now
a=(m*(omeganaught^2-omega^2)/(m^2*(omeganaught^2-omega^2)^2+omega^2*c^2))*F0;
b=omega*c/(m^2*(omeganaught^2-omega^2)^2+omega^2*c^2)*F0;
lambda=c/(2*m);
% calculate phi and A now for each iteration now that a and b are known
A=sqrt(a^2+b^2);
phi=atan(b/a);
% now that we have phi, A, and lambda, can start solving for C1 and C2
% using IVs. Formulas for C1 and C2 derived on paper and typed in.
t=0;
C1=-A*cos(-phi);
C2=lambda*C1+A*sin(-phi);
clear t;
syms t;
y=exp(-lambda*t)*(C1*cos(omega*t)+C2*sin(omega*t)+A*cos(omega*t-phi));
fplot(y,[0 10]);
hold on;
end
axis([0 10 -0.2 0.2])
legend('0.99*c_c_r_i_t','0.25*c_c_r_i_t','0.10*c_c_r_i_t','0.02*c_c_r_i_t');
grid on
The fplot second argument otherwise defaults to [-5 5].
.
0 Comments
More Answers (1)
Paul
on 11 Sep 2022
Edited: Paul
on 11 Sep 2022
fplot doesn't take t as the first argument as would have to be done for plot. Actually, I guess it can, but it's superfluous. Instead, use a second argument to fplot to indicate the desired plotting interval, as below.
syms t C1 C2;
k=4;
m=2;
c_crit=2*sqrt(k*m);
c1=0.99*c_crit;
c2=0.25*c_crit;
c3=0.10*c_crit;
c4=0.02*c_crit;
F0=1;
omeganaught=sqrt(k/m);
omega=1;
for c=[c1 c2 c3 c4]
% calculate a and b and lambda for each iteration since we know c now
a=(m*(omeganaught^2-omega^2)/(m^2*(omeganaught^2-omega^2)^2+omega^2*c^2))*F0;
b=omega*c/(m^2*(omeganaught^2-omega^2)^2+omega^2*c^2)*F0;
lambda=c/(2*m);
% calculate phi and A now for each iteration now that a and b are known
A=sqrt(a^2+b^2);
phi=atan(b/a);
% now that we have phi, A, and lambda, can start solving for C1 and C2
% using IVs. Formulas for C1 and C2 derived on paper and typed in.
t=0;
C1=-A*cos(-phi);
C2=lambda*C1+A*sin(-phi);
clear t;
syms t;
y=exp(-lambda*t)*(C1*cos(omega*t)+C2*sin(omega*t)+A*cos(omega*t-phi));
% fplot(t,y);
fplot(y,[0 25])
hold on;
end
%axis([0 10 -0.2 0.2])
legend('0.99*c_c_r_i_t','0.25*c_c_r_i_t','0.10*c_c_r_i_t','0.02*c_c_r_i_t');
grid on
0 Comments
See Also
Categories
Find more on Number Theory 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!