How do I solve system of differentials using ode45 and eom functions
8 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Hello and thank you for taking the time to read my question!
I am trying to solve a system of differential equations for
analytically and then numerically for
and
and plot the two for comparison. I also have to analytically find tension T in terms of theta then numerically find it in terms of time. The given equations for motion in normal-tangiential form are
, and
. The starting position is at
rad with m=2 kg, g=9.81 m/s^2, and r=0.5 m.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1749429/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1749434/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1749439/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1749444/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1749449/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1749454/image.png)
Below is my code so far. I keep getting an error trying to run the ode45 function saying that inputs must be floats, namely a single or double. I have to use the ode45 function as a requirment for the assignment, but I'm not sure if I have to use the eom bit.
Error:
Error using superiorfloat (line 13)
Inputs must be floats,
namely single or double.
Error in odearguments (line 114)
dataType = superiorfloat(t0,y0,f0);
Error in ode45 (line 104)
odearguments(odeIsFuncHandle,odeTreatAsMFile, solver_name, ode, tspan, y0, options, varargin);
Error in ESCI204_M1_Myers (line 74)
[T,S] = ode45(@eom,linspace(0,2,101),[0,0]);
Code:
%Givens:
theta0 = -pi/6;
m = 2;
g = 9.81;
r = 0.5;
syms Tens theta t thetaA
thetaA = linspace(-pi/6,pi/6,101);
% % DETERMINE ANALYTICALLY:------------------------------------------------
%Equation for angular velocity in terms of theta
thetadA = sqrt((-360*g/(pi*r))*(cos(theta0)-cos(thetaA)));
%Equation for Tension in terms of theta
TensA = 3*m*g*cos(thetaA)-2*m*g;
hold on
plot(thetaA,thetadA, 'black') %analytical solution for thetad(theta)
xlabel('Angular Position (rad) or time (t)')
ylabel('Angular Velocity (rad/sec)')
% % DETERMINE NUMERICALLY:
% 1) The angular velocity and angular position of the mass about point C
% as a function of time by integration of the equation of motion, thetadd
% 2) The tension in the string as a function of time.
function ds = eom(t,s) %S is current states - vector of current position and vel
%Givens:
theta0 = -pi/6;
m = 2;
g = 9.81;
r = 0.5;
syms Tens
ds(1,1) = sqrt((Tens-m*g*cos(s(1)))/(m*r)); % Derivative of position (s(1) = thetad
ds(2,1) = (-g*sin(s(1)))/r; % Derivative of velocity = thetadd
end
[T,S] = ode45(@eom,linspace(0,2,101),[0,0]);
0 Commenti
Risposta accettata
Aquatris
il 8 Ago 2024
Spostato: Steven Lord
il 8 Ago 2024
You defined a symbolic variable within your ode function, which is a nono if you wanna solve it numerically :D
function ds = eom(t,s) %S is current states - vector of current position and vel
%Givens:
theta0 = -pi/6;
m = 2;
g = 9.81;
r = 0.5;
syms Tens %======= THIS IS A NONO, plug in the values: Tens = 3*m*g*... =======%
ds(1,1) = sqrt((Tens-m*g*cos(s(1)))/(m*r)); % Derivative of position (s(1) = thetad
ds(2,1) = (-g*sin(s(1)))/r; % Derivative of velocity = thetadd
end
So plug in your values there
4 Commenti
Aquatris
il 8 Ago 2024
Modificato: Aquatris
il 12 Ago 2024
The reason why you are getting 0s as solution is because you defined the initial condition as 0 in your ode with the [0,0] argument. It should be [theta0, 0] instead where theta0 is -pi/6. Also the second argument for ode45 function is the time vector so you should use a time vector with small enough step size, how small depends on the problem.
[t,x] = ode45('odeFunction here','time vec here','initial states here')
Second things is, I am not sure since I do not know the problem exactly, but from what I understand, the equation of motion is defined by the equation
only. This completely defines your dynamics so you should solve this one analytically and numerically and compare. In analytical solution, I recommend you use small angle theorem to simplify the equation if it is a pendulum :)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1750019/image.png)
The second equation,
is there to calculate the T term after you solve your equation. So after you obtain your analytical and numerical solution, you should compare the resulting analytical T and numeric T by doing a simple
.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1750024/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1750029/image.png)
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Ordinary Differential Equations in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!