2DOF (ODE) response in MATLAB

Im trying to find the response to the 2DOF for the following system,
initial conditions:
with the the following force applied to m2
I obtained the eqm, and tried to solve the ODE's using dsolove however the code doesnt work, Im not sure if this is because of wrong equation of motion, or Im taking the wrong approach. Also im wondering how to implement lsim command to solve this problem. I would appriciate the help. Thanks very much!
% finding force
F0=5;
T=1;
t=0:0.01:1;
F1=-F0*(t/T)+F0;
plot(t,F1)
hold on
t2=1:0.01:2
F2=F0*(t2/T)-F0;
plot(t2,F2)
hold on
t3=3:0.01:10
F3=F0;
F2=[F1,F2,F3];
hold off
% solving problem
syms x1(t) x2(t) F1 F2
m1=1;m2=2;c1=0;c2=0;k1=4;k2=4;k0=0.5;F1=F1;F2=F3;
eq1=F2==m2*(diff(x2,2)-diff(x1,2))+c2*(diff(x2,1)-diff(x1,1))+k2*(x2-x1);
eq2=F1==m1*diff(x1,2)+c1*diff(x1,1)+k1*x1;
Dx1=diff(x1);Dx2=diff(x2);
[X1(t),X2(t)]=dsolve([eq1 eq2],[x1(0)==0,Dx1(0)==0,x2(0)==0,Dx2(0)==0]);
t1=0:0.01:10;
Force=F2;
x1=subs(X2(t),{t,F2,F1},{t1,Force,0})
plot(t,X2(t));legend('X1(t)','X2(t)')

Answers (1)

Ameer Hamza
Ameer Hamza on 12 Apr 2020
Edited: Ameer Hamza on 12 Apr 2020
In MATLAB, ode45 solver can be used to solve such equations numerically. Since you are solving these equations symbolically, the following correct the error in your code
% finding force
F0=5;
T=1;
t=0:0.01:1;
F1=-F0*(t/T)+F0;
plot(t,F1)
hold on
t2=1:0.01:2
F2=F0*(t2/T)-F0;
plot(t2,F2)
hold on
t3=3:0.01:10;
F3=F0;
F2=[F1,F2,F3];
hold off
% solving problem
syms x1(t) x2(t) F1 F2
m1=1;m2=2;c1=0;c2=0;k1=4;k2=4;k0=0.5;F1=F1;F2=F3;
eq1=F2==m2*(diff(x2,2)-diff(x1,2))+c2*(diff(x2,1)-diff(x1,1))+k2*(x2-x1);
eq2=F1==m1*diff(x1,2)+c1*diff(x1,1)+k1*x1;
Dx1=diff(x1);Dx2=diff(x2);
[X1(t),X2(t)]=dsolve([eq1 eq2],[x1(0)==0,Dx1(0)==0,x2(0)==0,Dx2(0)==0]);
t1=0:0.01:10;
Force=F2;
x1(t)=subs(X2(t),{t,F2,F1},{t1,Force,0});
x2(t)=subs(X2(t),{t,F2,F1},{t1,Force,0});
plot(t1,x1(t), t1,x2(t));legend('X1(t)','X2(t)')
But the two variables x1, and x2 overlap. I am not sure if this is correct solution. If you can give the mathematical form of your equations, I can see if your equations are correctly implemented.

6 Comments

Thanks, do you know how i can use lsim to solve the system?
Yes, If you can write state-space equations for your system, then lsim can solve it. If you can show me the state-space equations, I can suggest a solution.
im little unfamiliar state space model, i derived the eqm's to be, I was thinking using ss comand to get state space matrices, and then lsim to solve it. But im just not sure how to use the commands properly.
ss() function requires that you already have the state-space matrices. You can write the transfer functions and from these two equations and the use tf2ss function to get the state-space matrices. Note that you will need to set the RHS of both equations equal to , to find the transfer functions.
If you can drive these two transfer functions for these equations, I can tell you how to apply the tf2ss and lsim.
Hey Amir, I ended up using ode45 to solve it. Im dealing with another ode probelm and i was wondering if I could have your feedback. Heres the link to that question https://www.mathworks.com/matlabcentral/answers/517960-sir-model-using-fsolve-and-euler-3pdf
Thanks a lot for the help.
Glad to be of help. If you can apply ode45, then you already have knowledge about the state-space representation of your system of ODE.

Sign in to comment.

Asked:

on 12 Apr 2020

Commented:

on 15 Apr 2020

Community Treasure Hunt

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

Start Hunting!