reduceDAEIndex
Convert system of first-order differential algebraic equations to equivalent system of differential index 1
Syntax
Description
[
converts a high-index system of first-order differential algebraic equations
newEqs
,newVars
]
= reduceDAEIndex(eqs
,vars
)eqs
to an equivalent system newEqs
of
differential index 1.
reduceDAEIndex
keeps the original equations and variables and
introduces new variables and equations. After conversion,
reduceDAEIndex
checks the differential index of the new system by
calling isLowIndexDAE
. If the index of newEqs
is 2
or higher, then reduceDAEIndex
issues a warning.
Examples
Reduce Differential Index of DAE System
Check if the following DAE system has a low (0
or
1
) or high (>1
) differential index. If the
index is higher than 1
, then use reduceDAEIndex
to
reduce it.
Create the following system of two differential algebraic equations. Here, the symbolic
functions x(t)
, y(t)
, and z(t)
represent 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) z(t) f(t) eqs = [diff(x) == x + z, diff(y) == f(t), x == y]; vars = [x(t), y(t), z(t)];
Use isLowIndexDAE
to check the differential index of the system.
For this system, isLowIndexDAE
returns 0
(false
). This means that the differential index of the system is
2
or higher.
isLowIndexDAE(eqs, vars)
ans = logical 0
Use reduceDAEIndex
to rewrite the system so that the differential
index is 1
. The new system has one additional state variable,
Dyt(t)
.
[newEqs, newVars] = reduceDAEIndex(eqs, vars)
newEqs = diff(x(t), t) - z(t) - x(t) Dyt(t) - f(t) x(t) - y(t) diff(x(t), t) - Dyt(t) newVars = x(t) y(t) z(t) Dyt(t)
Check if the differential order of the new system is lower than
2
.
isLowIndexDAE(newEqs, newVars)
ans = logical 1
Reduce the Index and Return More Details
Reduce the differential index of a system that contains two
second-order differential algebraic equation. Because the equations are second-order
equations, first use reduceDifferentialOrder
to rewrite the system to
a system of first-order DAEs.
Create the following system of two second-order DAEs. Here, x(t)
,
y(t)
, and F(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 t x(t) y(t) F(t) r g eqs = [diff(x(t), t, t) == -F(t)*x(t),... diff(y(t), t, t) == -F(t)*y(t) - g,... x(t)^2 + y(t)^2 == r^2 ]; vars = [x(t), y(t), F(t)];
Rewrite this system so that all equations become first-order differential equations. The
reduceDifferentialOrder
function replaces the second-order DAE by two
first-order expressions by introducing the new variables Dxt(t)
and
Dyt(t)
. It also replaces the first-order equations by symbolic
expressions.
[eqs, vars] = reduceDifferentialOrder(eqs, vars)
eqs = diff(Dxt(t), t) + F(t)*x(t) diff(Dyt(t), t) + g + F(t)*y(t) - r^2 + x(t)^2 + y(t)^2 Dxt(t) - diff(x(t), t) Dyt(t) - diff(y(t), t) vars = x(t) y(t) F(t) Dxt(t) Dyt(t)
Use reduceDAEIndex
to rewrite the system so that the differential
index is 1
.
[eqs, vars, R, originalIndex] = reduceDAEIndex(eqs, vars)
eqs = Dxtt(t) + F(t)*x(t) g + Dytt(t) + F(t)*y(t) - r^2 + x(t)^2 + y(t)^2 Dxt(t) - Dxt1(t) Dyt(t) - Dyt1(t) 2*Dxt1(t)*x(t) + 2*Dyt1(t)*y(t) 2*Dxt1t(t)*x(t) + 2*Dxt1(t)^2 + 2*Dyt1(t)^2 + 2*y(t)*diff(Dyt1(t), t) Dxtt(t) - Dxt1t(t) Dytt(t) - diff(Dyt1(t), t) Dyt1(t) - diff(y(t), t) vars = x(t) y(t) F(t) Dxt(t) Dyt(t) Dytt(t) Dxtt(t) Dxt1(t) Dyt1(t) Dxt1t(t) R = [ Dytt(t), diff(Dyt(t), t)] [ Dxtt(t), diff(Dxt(t), t)] [ Dxt1(t), diff(x(t), t)] [ Dyt1(t), diff(y(t), t)] [ Dxt1t(t), diff(x(t), t, t)] originalIndex = 3
Use reduceRedundancies
to shorten the system.
[eqs, vars] = reduceRedundancies(eqs, vars)
eqs = Dxtt(t) + F(t)*x(t) g + Dytt(t) + F(t)*y(t) - r^2 + x(t)^2 + y(t)^2 2*Dxt(t)*x(t) + 2*Dyt(t)*y(t) 2*Dxtt(t)*x(t) + 2*Dytt(t)*y(t) + 2*Dxt(t)^2 + 2*Dyt(t)^2 Dytt(t) - diff(Dyt(t), t) Dyt(t) - diff(y(t), t) vars = x(t) y(t) F(t) Dxt(t) Dyt(t) Dytt(t) Dxtt(t)
Input Arguments
Output Arguments
Algorithms
The implementation of reduceDAEIndex
uses the Pantelides algorithm.
This algorithm reduces higher-index systems to lower-index systems by selectively adding
differentiated forms of the original equations. The Pantelides algorithm can underestimate the
differential index of a new system, and therefore, can fail to reduce the differential index
to 1
. In this case, reduceDAEIndex
issues a warning
and, for the syntax with four output arguments, returns the value of
oldIndex
as NaN
. The
reduceDAEToODE
function uses more reliable, but slower Gaussian
elimination. Note that reduceDAEToODE
requires the DAE system to be
semilinear.
Version History
Introduced in R2014b