Reduce order of differential equations to first-order
Support for character vector or string inputs will be removed in a future release. Instead,
use syms
to declare variables, and replace inputs
such as odeToVectorField('D2y = x')
with syms y(x),
odeToVectorField(diff(y,x,2) == x)
.
converts
higher-order differential equations V
= odeToVectorField(eqn1,...,eqnN
)eqn1,...,eqnN
to
a system of first-order differential equations, returned as a symbolic
vector.
[
converts V
,S
] =
odeToVectorField(eqn1,...,eqnN
)eqn1,...,eqnN
and
returns two symbolic vectors. The first vector V
is
the same as the output of the previous syntax. The second vector S
shows
the substitutions made to obtain V
.
To solve the resulting system of first-order differential
equations, generate a MATLAB® function handle using matlabFunction
with V
as
an input. Then, use the generated MATLAB function handle as an
input for the MATLAB numerical solver ode23
or ode45
.
odeToVectorField
can convert
only quasi-linear differential equations. That is, the highest-order
derivatives must appear linearly. For example, odeToVectorField
can
convert y*y″(t)
= –t2 because
it can be rewritten as y″(t)
= –t2/y.
However, it cannot convert y″(t)2 =
–t2 or sin(y″(t))
= –t2.
To convert an nth-order differential equation
into a system of first-order differential equations, odetovectorfield
makes
these substitutions.
Using the new variables, it rewrites the equation as a system of n first-order differential equations:
odeToVectorField
returns the right sides
of these equations as the elements of vector V
and
the substitutions made as the second output S
.
dsolve
| matlabFunction
| ode23
| ode45