# New to matlab and not sure how to reduce to first order

1 view (last 30 days)
Samantha on 18 Dec 2020
Edited: James Tursa on 18 Dec 2020
Solve the third-order ODE function
y′′′− 2 * y′′−(y′)^2 = 1
With tspan [0 5], y(0) = y’(0) = 0, y’’ = 1.
You need to reduce the given third-order ODE equation to standard 1st-order ODE equations before solving
##### 2 CommentsShowHide 1 older comment
Jon on 18 Dec 2020
Would this work? ode45 only solves first order equations, wouldn't you still have a second order equation

Jon on 18 Dec 2020
Edited: Jon on 18 Dec 2020
Define
y1 = y
y2 = y'
y3 = y''
% and then make a function f, for example put the code below into an m-file called f.m
function dydt = f(t,y)
dydt(1) = y(2); % y1' = y2
dydt(2) = y(3); % y'' = y3
dydt(3) = 1 + 2*y(3) + y(2)^2;
then use one of the ode solvers e.g ode45 passing it the function f described above
Please see https://www.mathworks.com/help/matlab/math/choose-an-ode-solver.html especially the section on solving higher order equation
James Tursa on 18 Dec 2020
The ode45( ) call should not be inside your derivative function. That's backwards. The ode45( ) function is calling your derivative function, not the other way around. So you should have some code that defines initial conditions and calls ode45( ) like this:
tspan = [0 5]; % time span
y0 = [0 0 1]; % initial values of y, y', and y''
ode45(@odef,tspan,y0);
plot(t,y);
and then a separate code (e.g., in a file called odef.m, or maybe below the code listed above) that contains your derivative code:
function dydt = odef(t,y)
dydt = zeros(3,1); % the values y', y'', and y'''
dydt(1) = y(2); % y' = y2
dydt(2) = y(3); % y'' = y3
dydt(3) = 1 + 2*y(3) + y(2)^2; % y''' = 1 + 2y'' + (y')^2
end