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

1 visualización (últimos 30 días)
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]);

Respuestas (1)

Alan Stevens
Alan Stevens el 17 de Jun. de 2021
Turn your second order equation into two simultaneous first order equations.
  2 comentarios
curiously learning
curiously learning el 17 de Jun. de 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 el 17 de Jun. de 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.

Iniciar sesión para comentar.

Categorías

Más información sobre Programming en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by