2nd order differential equation solution cant fit the problem

1 view (last 30 days)
I try to simulate the swinging of a Garage door!
The soluation should be found via Lagrange. I get all the derivations as is shown in the sector with the "L_1,L_2,..."
But when solving via ode45 it shows me a normal sinus function and is far from what it should look like
clear
syms phi(t) m c g alpha(t) CB_x CB_z BA_x BA_z v_x v_z x0
m= 100;
copt= 3558.7;
g= 9.81;
x0=1.360564445;
k=0.75;
phi_d=diff(phi);
phi_dd= diff(phi,t,2);
alpha(t)= asin((1.7-2.1*cos(phi(t)))/3.6);
CB_x= -2.1*sin(phi);
CB_z= 2.1*cos(phi);
BA_x= 1.8*cos(alpha(t));
BA_z= 1.8*sin(alpha(t));
v_x=diff(CB_x+BA_x);
v_z=diff(CB_z+BA_z);
v=sqrt(v_x^2+v_z^2);
r1=((CB_x+BA_x)^2+(CB_z+BA_z)^2)^0.5;
alpha_d=diff(alpha(t),t);
x=sqrt(1.8^2+0.6^2-2*1.8*0.6*cos(phi(t)));
U=1/2*copt*k*(x-x0)^2;
W=-m*g*(CB_z+BA_z);
V=U+W;
T_trans=0.5*m*v^2;
T_rot=1/3*m*3.6^2*alpha_d^2;
T=T_trans+T_rot;
L_1=diff(diff(T,phi_d),t);
L_2=diff(T,phi(t));
L_3=diff(V,phi(t));
% L_1=diff(diff(T,phi_d),phi)*phi_d+diff(diff(T,phi_d),phi_d)*phi_dd;
% phi_dd_test=(diff(diff(T,phi_d),phi)*phi_d-L_3+L_2)/diff(diff(T,phi_d),phi_d);
F=L_1-L_2+L_3==0;
[Y,S] = odeToVectorField(F);
tspan=[0 30];
y0_45=[deg2rad(35.9) 0];
M = matlabFunction(Y,'vars', {'t','Y'});
[t,Y] = ode45(@(t, Y) M(t,Y),tspan,y0_45);
plot(t, Y, 'linewidth', 1.5)
xlim([0.00 10.00])
ylim([-4.00 4.00])
zlim([-1.00 1.00])
legend(["Winkel","Winkelgeschwindigkeit"])
xlabel("Time")
  2 Comments
Sam Chak
Sam Chak on 14 Jun 2022
Based on what you described, does it suggest that the Lagrangian formulation should be checked again?
Patrick Nowohradsky
Patrick Nowohradsky on 14 Jun 2022
no the formulation should be fine!
because of the angle alpha (in my case the angle between door and horizontal line at the top) it should be nonlinear
phi ist the angle in the "middle"

Sign in to comment.

Answers (1)

Karan Singh
Karan Singh on 4 Oct 2023
Hi Patrick,
From what I understand, the goal is to simulate the swinging motion of a garage door using Lagrange equations and solving the resulting differential equation using ode45 in MATLAB. However, there are a few issues in the code that might be causing the unexpected results. Let's go through them:
  1. In the definition of CB_x and CB_z, you have used sin(phi) and cos(phi) instead of sin(phi(t)) and cos(phi(t)), respectively. You need to evaluate these trigonometric functions at the current time t by replacing phi with phi(t). Similarly, in the definition of alpha(t), you need to replace phi with phi(t).
  2. In the definition of v_x and v_z, you have used diff(CB_x + BA_x) and diff(CB_z + BA_z), respectively. However, you need to evaluate these derivatives at the current time t by replacing diff(CB_x + BA_x) with diff(CB_x + BA_x, t) and diff(CB_z + BA_z) with diff(CB_z + BA_z, t).
  3. In the definition of x, you have used cos(phi(t)) instead of cos(alpha(t)). Replace cos(phi(t)) with cos(alpha(t)).
  4. The equation F = L_1 - L_2 + L_3 == 0represents the Lagrange equation. However, it seems that you have commented out a line of code that calculates phi_dd_test. Uncomment that line and assign phi_dd_test the value of (diff(diff(T,phi_d),phi)*phi_d - L_3 + L_2) / diff(diff(T,phi_d),phi_d).
Attached below are some documentation links that you may find helpful:
Hope this helps!
Karan Singh Khati

Categories

Find more on Interpolation in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!