MATLAB: Solving 4th Order Differential Equations

differential equationsfourth orderode45

I am trying to solve a fourth order Differential Equation (no previous Diff Q experience) and I'm running into issues with the ode45 function. I think I have entered the differential equations correctly in order for MATLAB to see them as first order equations. Any help is welcome. The equation would be f = f2 below.
if true
%clear all
clc
t = [0 9]; syms y y0
yx = y^3; y1 = diff(y0,1);
y2 = diff(y0,2);
y3 = diff(y0,3);
y4 = diff(y0,4);
f=y4+5.*(1-y0)*y3+2.*y2+3*y1+yx;
f2 = 10.*sin(pi.*t);
z = [y0 y1 y2 y3]; Z = transpose(z);
y0=0; [t,y] = ode45(@(z,y)f2,t,y0); end

Best Answer

You appear to be on the correct path.
I would take your original symbolic differential equation as an argument to the Symbolic Math Toolbox odeToVectorField (link) function, then use that output to an argument to the matlabFunction (link) function:
syms y(t) y0(t) Y t
yx = y^3;
y1 = diff(y0,1);
y2 = diff(y0,2);
y3 = diff(y0,3);
y4 = diff(y0,4);
f=y4+5.*(1-y0)*y3+2.*y2+3*y1+yx;
[F, Fsubs] = odeToVectorField(f)
Fcn = matlabFunction(F, 'Vars',{t Y})
This gives you:
F =
Y[2]
Y[3]
Y[4]
(5*Y[1] - 5)*Y[4] - y(t)^3 - 3*Y[2] - 2*Y[3]
Fsubs =
y0
Dy0
D2y0
D3y0
and (slightly edited):
Fcn = @(t,Y) [Y(2); Y(3); Y(4); -y(t).^3+(Y(1).*5.0-5.0).*Y(4)-Y(2).*3.0-Y(3).*2.0];
that you can use in ode45.