Reduce system of higher-order differential equations to equivalent system of first-order differential equations
[
rewrites
a system of higher-order differential equations newEqs
,newVars
]
= reduceDifferentialOrder(eqs
,vars
)eqs
as
a system of first-order differential equations newEqs
by
substituting derivatives in eqs
with new variables.
Here, newVars
consists of the original variables vars
augmented
with these new variables.
Reduce a system containing higher-order DAEs to a system containing only first-order DAEs.
Create the system of differential equations, which includes
a second-order expression. Here, x(t)
and y(t)
are
the state variables of the system, and c1
and c2
are
parameters. Specify the equations and variables as two symbolic vectors:
equations as a vector of symbolic equations, and variables as a vector
of symbolic function calls.
syms x(t) y(t) c1 c2 eqs = [diff(x(t), t, t) + sin(x(t)) + y(t) == c1*cos(t),... diff(y(t), t) == c2*x(t)]; vars = [x(t), y(t)];
Rewrite this system so that all equations become first-order
differential equations. The reduceDifferentialOrder
function
replaces the higher-order DAE by first-order expressions by introducing
the new variable Dxt(t)
. It also represents all
equations as symbolic expressions.
[newEqs, newVars] = reduceDifferentialOrder(eqs, vars)
newEqs = diff(Dxt(t), t) + sin(x(t)) + y(t) - c1*cos(t) diff(y(t), t) - c2*x(t) Dxt(t) - diff(x(t), t) newVars = x(t) y(t) Dxt(t)
Reduce a system containing a second- and a
third-order expression to a system containing only first-order DAEs.
In addition, return a matrix that expresses the variables generated
by reduceDifferentialOrder
via the original variables
of this system.
Create a system of differential equations, which includes a
second- and a third-order expression. Here, x(t)
and y(t)
are
the state variables of the system. Specify the equations and variables
as two symbolic vectors: equations as a vector of symbolic equations,
and variables as a vector of symbolic function calls.
syms x(t) y(t) f(t) eqs = [diff(x(t),t,t) == diff(f(t),t,t,t), diff(y(t),t,t,t) == diff(f(t),t,t)]; vars = [x(t), y(t)];
Call reduceDifferentialOrder
with three
output arguments. This syntax returns matrix R
with
two columns: the first column contains the new variables, and the
second column expresses the new variables as derivatives of the original
variables, x(t)
and y(t)
.
[newEqs, newVars, R] = reduceDifferentialOrder(eqs, vars)
newEqs = diff(Dxt(t), t) - diff(f(t), t, t, t) diff(Dytt(t), t) - diff(f(t), t, t) Dxt(t) - diff(x(t), t) Dyt(t) - diff(y(t), t) Dytt(t) - diff(Dyt(t), t) newVars = x(t) y(t) Dxt(t) Dyt(t) Dytt(t) R = [ Dxt(t), diff(x(t), t)] [ Dyt(t), diff(y(t), t)] [ Dytt(t), diff(y(t), t, t)]
daeFunction
| decic
| findDecoupledBlocks
| incidenceMatrix
| isLowIndexDAE
| massMatrixForm
| odeFunction
| reduceDAEIndex
| reduceDAEToODE
| reduceRedundancies