MATLAB: Solve second order ode system numerically

numerical solvingodesystem of differential equations

hello I'm trying to solve this system of second order ordinary differential equations using ode functions (not dsolve):
k1*x' + k2*y' + k3*x + k4*y = u
k5*x" + k6*y" + k7*y' + k8*y = 0
is there a way to convert this system to first order system of equations like in "odeToVectorField"? also is there a function that acts inversely? (like a "VectorFieldToode") to combine the two equations into one higher order differential equation.

Best Answer

I would normally expect this to work for other systems of differential equations:
syms k1 k2 k3 k4 k5 k6 k7 k8 u x(t) y(t) Y
Dx = diff(x);
D2x = diff(Dx);
Dy = diff(y);
D2y = diff(Dy);
Eqn1 = k1*Dx + k2*Dy + k3*x + k4*y == u;
Eqn2 = k5*D2x + k6*D2y + k7*Dy + k8*y == 0;
[VF,Subs] = odeToVectorField(Eqn1, Eqn2)
odeFcn = matlabFunction(VF, 'Vars',{t, Y, u, [k1, k2, k3, k4, k5, k6, k7, k8]})
However, that code throws this error:
Error using mupadengine/feval (line 187)
Number of indeterminates exceeds the number of ODEs.
I must leave it to you to resolve that problem.