Solving 4th Order Differential Equations

8 次查看(过去 30 天)
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
  1 个评论
John D'Errico
John D'Errico 2017-12-11
编辑:John D'Errico 2017-12-11
Please don't put in comments as an answer. And then don't accept your own answer.
I moved your accepted answer into a comment. Please accept Star's answer if you feel it helped you.

请先登录,再进行评论。

采纳的回答

Star Strider
Star Strider 2017-12-11
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.
  2 个评论
John D'Errico
John D'Errico 2017-12-11
Moving the "non-answer" comment into a comment from Michael:
"Thanks! That was a great help!"

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Symbolic Math Toolbox 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by