# reduceDAEToODE

Convert system of first-order semilinear differential algebraic equations to equivalent system of differential index 0

## Syntax

## Description

converts a high-index system of first-order semilinear algebraic equations
`newEqs`

= reduceDAEToODE(`eqs`

,`vars`

)`eqs`

to an equivalent system of ordinary differential equations,
`newEqs`

. The differential index of the new system is
`0`

, that is, the Jacobian of `newEqs`

with respect to
the derivatives of the variables in `vars`

is invertible.

`[`

returns a vector of constraint equations.`newEqs`

,`constraintEqs`

]
= reduceDAEToODE(`eqs`

,`vars`

)

## Examples

### Convert DAE System to Implicit ODE System

Convert a system of differential algebraic equations (DAEs) to a system of implicit ordinary differential equations (ODEs).

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) eqs = [diff(x,t)+x*diff(y,t) == y,... x*diff(x, t)+x^2*diff(y) == sin(x),... x^2 + y^2 == t*z]; vars = [x(t), y(t), z(t)];

Use `reduceDAEToODE`

to rewrite the system so that the differential
index is `0`

.

newEqs = reduceDAEToODE(eqs, vars)

newEqs = x(t)*diff(y(t), t) - y(t) + diff(x(t), t) diff(x(t), t)*(cos(x(t)) - y(t)) - x(t)*diff(y(t), t) z(t) - 2*x(t)*diff(x(t), t) - 2*y(t)*diff(y(t), t) + t*diff(z(t), t)

### Reduce System and Return More Details

Check if the following DAE system has a low (`0`

or
`1`

) or high (`>1`

) differential index. If the
index is higher than `1`

, first try to reduce the index by using
`reduceDAEIndex`

and then by using
`reduceDAEToODE`

.

Create the system of differential algebraic equations. Here, the functions
`x1(t)`

, `x2(t)`

, and `x3(t)`

represent
the state variables of the system. The system also contains the functions
`q1(t)`

, `q2(t)`

, and `q3(t)`

. These
functions do not represent state variables. 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 x1(t) x2(t) x3(t) q1(t) q2(t) q3(t) eqs = [diff(x2) == q1 - x1, diff(x3) == q2 - 2*x2 - t*(q1-x1), q3 - t*x2 - x3]; vars = [x1(t), x2(t), x3(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`

as your first attempt to rewrite the system so
that the differential index is `1`

. For this system,
`reduceDAEIndex`

issues a warning because it cannot reduce the
differential index of the system to `0`

or `1`

.

[newEqs, newVars] = reduceDAEIndex(eqs, vars)

Warning: Index of reduced DAEs is larger than 1. newEqs = x1(t) - q1(t) + diff(x2(t), t) Dx3t(t) - q2(t) + 2*x2(t) + t*(q1(t) - x1(t)) q3(t) - x3(t) - t*x2(t) diff(q3(t), t) - x2(t) - t*diff(x2(t), t) - Dx3t(t) newVars = x1(t) x2(t) x3(t) Dx3t(t)

If `reduceDAEIndex`

cannot reduce the semilinear system so that the
index is `0`

or `1`

, try using
`reduceDAEToODE`

. This function can be much slower, therefore it is not
recommended as a first choice. Use the syntax with two output arguments to also return the
constraint equations.

[newEqs, constraintEqs] = reduceDAEToODE(eqs, vars)

newEqs = x1(t) - q1(t) + diff(x2(t), t) 2*x2(t) - q2(t) + t*q1(t) - t*x1(t) + diff(x3(t), t) diff(x1(t), t) - diff(q1(t), t) + diff(q2(t), t, t) - diff(q3(t), t, t, t) constraintEqs = x1(t) - q1(t) + diff(q2(t), t) - diff(q3(t), t, t) x3(t) - q3(t) + t*x2(t) x2(t) - q2(t) + diff(q3(t), t)

Use the syntax with three output arguments to return the new equations, constraint
equations, and the differential index of the original system, `eqs`

.

[newEqs, constraintEqs, oldIndex] = reduceDAEToODE(eqs, vars)

newEqs = x1(t) - q1(t) + diff(x2(t), t) 2*x2(t) - q2(t) + t*q1(t) - t*x1(t) + diff(x3(t), t) diff(x1(t), t) - diff(q1(t), t) + diff(q2(t), t, t) - diff(q3(t), t, t, t) constraintEqs = x1(t) - q1(t) + diff(q2(t), t) - diff(q3(t), t, t) x3(t) - q3(t) + t*x2(t) x2(t) - q2(t) + diff(q3(t), t) oldIndex = 3

## Input Arguments

## Output Arguments

## Algorithms

The implementation of `reduceDAEToODE`

is based on Gaussian
elimination. This algorithm is more reliable than the Pantelides algorithm used by
`reduceDAEIndex`

, but it can be much slower.

## Version History

**Introduced in R2014b**