Solving 4th Order Differential Equations
9 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Michael Johnson
am 11 Dez. 2017
Bearbeitet: John D'Errico
am 11 Dez. 2017
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 Kommentar
John D'Errico
am 11 Dez. 2017
Bearbeitet: John D'Errico
am 11 Dez. 2017
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.
Akzeptierte Antwort
Star Strider
am 11 Dez. 2017
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 Kommentare
John D'Errico
am 11 Dez. 2017
Moving the "non-answer" comment into a comment from Michael:
"Thanks! That was a great help!"
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Symbolic Math Toolbox finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!