Main Content

Check if differential index of system of equations is lower than 2

`isLowIndexDAE(`

checks if the system `eqs`

,`vars`

)`eqs`

of first-order semilinear differential
algebraic equations (DAEs) has a low differential index. If the differential index of the
system is `0`

or `1`

, then
`isLowIndexDAE`

returns logical `1`

(true). If the
differential index of `eqs`

is higher than `1`

, then
`isLowIndexDAE`

returns logical `0`

(false).

The number of equations `eqs`

must match the number of variables
`vars`

.

Check if a system of first-order semilinear DAEs has a low
differential index (`0`

or `1`

).

Create the following system of two differential algebraic equations. 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) eqs = [diff(x(t),t) == x(t) + y(t), x(t)^2 + y(t)^2 == 1]; vars = [x(t), y(t)];

Use `isLowIndexDAE`

to check the differential order of the system.
The differential order of this system is `1`

. For systems of index
`0`

and `1`

, `isLowIndexDAE`

returns
`1`

(`true`

).

isLowIndexDAE(eqs, vars)

ans = logical 1

Check if the following DAE system has a low or high 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,
`x(t)`

, `y(t)`

, and `z(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) z(t) f(t) eqs = [diff(x(t),t) == x(t) + z(t),... diff(y(t),t) == f(t), x(t) == y(t)]; 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`

. Calling this function with four output arguments also shows
the differential index of the original system. The new system has one additional state
variable, `Dyt(t)`

.

[newEqs, newVars, ~, oldIndex] = 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) oldIndex = 2

Check if the differential order of the new system is lower than
`2`

.

isLowIndexDAE(newEqs, newVars)

ans = logical 1

`daeFunction`

| `decic`

| `findDecoupledBlocks`

| `incidenceMatrix`

| `massMatrixForm`

| `odeFunction`

| `reduceDAEIndex`

| `reduceDAEToODE`

| `reduceDifferentialOrder`

| `reduceRedundancies`