explanation of ode45 for constant force

6 vues (au cours des 30 derniers jours)
Ajinkya
Ajinkya le 23 Jan 2023
Modifié(e) : Sam Chak le 24 Jan 2023
I am implementing the shm equation ( m x'' + c x' + k x = F0) in matlab using ode45. The RHS is a constant force (F0). I am still getting an oscillatory response. The steady state response is equal to the static deformation. What is confusing me are the oscillations. What a force with constant magnitude result in an oscillatory response. Is my implementation wrong or my understanding of physics?
The sample code is shown below.
function dydt = sdof_fun(t,y,m,k,c,F)
dydt(1) = y(2);
dydt(2) = (F/m) - (k/m)*y(1) - (c/m)*y(2);
dydt = dydt(:);
end
[t,w] = ode45(@(t,y) sdof_fun(t,y,m,k,c,F),tspan,ic);
  2 commentaires
Ajinkya
Ajinkya le 23 Jan 2023
Oh, Is that the free vibration response (response of the Homogeneous equation)?
Torsten
Torsten le 23 Jan 2023
Modifié(e) : Torsten le 23 Jan 2023
It depends on the zeros of the characteristic equation
m*x^2 + c*x + k = 0
what kind of response you get (especially the sign of the discriminant disc = c^2 - 4*k*m).
So check your constants.

Connectez-vous pour commenter.

Réponses (1)

Sam Chak
Sam Chak le 24 Jan 2023
Modifié(e) : Sam Chak le 24 Jan 2023
Analysis shows that the steady-state value of of the linear system is given by
.
In your case, I guess that the oscillatory response is observed because . If so, then try extending the simulation time long enough until you see the response converges to .
Another way is to check the value of the system's damping ratio, given by
.
If the damping ratio value is very small, then the oscillations die out very slowly. If , then a critically-damped response will be observed.
The following example shows the convergence, with so that the oscillations die out faster.
m = 11; % change to 49/20 to observe a critically-damped response
c = 7;
k = 5;
F = 3;
params = [m c k F];
tspan = 0:0.01:30;
ic = [-1 0];
[t, y] = ode45(@(t, y) sdof_fun(t, y, params), tspan, ic);
plot(t, y(:,1), 'linewidth', 1.5), grid on
xlabel('t'), ylabel('y')
title('System Response')
function dydt = sdof_fun(t, y, params)
m = params(1);
c = params(2);
k = params(3);
F = params(4);
dydt(1) = y(2);
dydt(2) = (F/m) - (k/m)*y(1) - (c/m)*y(2);
dydt = dydt(:);
end

Catégories

En savoir plus sur Programming dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by