How to use ode45 with a time dependant second order differential equation

1 Ansicht (letzte 30 Tage)
Hello,
I have the below code for a second order ordinary differential equation. In this, the value of D depends on y (as shown by the commented line). I see from the Matlab help file for ode45, how such an equation be solved for a first order. But I don't know how to do it for a second order equation. Could you please help? Thank you.
syms h(t)
A=10*diff(h, 2);
B=8 * diff(h) ;
C=10 * h ;
%D=interp1(E(:,1),E(:,2),y)
D=2; %[
[V] = odeToVectorField(A == (D-C-B));
M = matlabFunction(V,'vars', {'t','Y'});
sol = ode45(M,[0 10],[0 0]);
fplot(@(x)deval(sol,x,1), [0, 10]);

Antworten (1)

Alan Stevens
Alan Stevens am 17 Jun. 2021
Turn your second order equation into two simultaneous first order equations.
  2 Kommentare
curiously learning
curiously learning am 17 Jun. 2021
Thank you for the suggestion. That is where I am struggling. To convert, one has to use a odetovectorfield, and I don't know how to use it in this context. Could you perhaps give an example?
Alan Stevens
Alan Stevens am 17 Jun. 2021
If you are interested only in numerical results you don't need any symbolic stuff at all.
With an equation like d^2y/dt^2 + a*dy/dt + b*y = 0, you can turn that into two first order equations bysetting
dy/dt = v
dv/dt = -a*v - b*y
Do
doc ode45
for more details.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Programming finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by