# ODESystem

## System Constructors

`ModelingToolkit.ODESystem`

— Type`struct ODESystem <: ModelingToolkit.AbstractODESystem`

A system of ordinary differential equations.

**Fields**

`eqs`

The ODEs defining the system.

`iv`

Independent variable.

`states`

Dependent (state) variables. Must not contain the independent variable.

N.B.: If torn

*matching !== nothing, this includes all variables. Actual ODE states are determined by the SelectedState() entries in `torn*matching`.

`ps`

Parameter variables. Must not contain the independent variable.

`var_to_name`

Array variables.

`ctrls`

Control parameters (some subset of

`ps`

).`observed`

Observed states.

`tgrad`

Time-derivative matrix. Note: this field will not be defined until

`calculate_tgrad`

is called on the system.

`jac`

Jacobian matrix. Note: this field will not be defined until

`calculate_jacobian`

is called on the system.

`ctrl_jac`

Control Jacobian matrix. Note: this field will not be defined until

`calculate_control_jacobian`

is called on the system.

`Wfact`

`Wfact`

matrix. Note: this field will not be defined until`generate_factorized_W`

is called on the system.

`Wfact_t`

`Wfact_t`

matrix. Note: this field will not be defined until`generate_factorized_W`

is called on the system.

`name`

Name: the name of the system

`systems`

systems: The internal systems. These are required to have unique names.

`defaults`

defaults: The default values to use when initial conditions and/or parameters are not supplied in

`ODEProblem`

.

`torn_matching`

torn_matching: Tearing result specifying how to solve the system.

`connector_type`

connector_type: type of the system

`connections`

connections: connections in a system

`preface`

preface: inject assignment statements before the evaluation of the RHS function.

`continuous_events`

continuous_events: A

`Vector{SymbolicContinuousCallback}`

that model events. The integrator will use root finding to guarantee that it steps at each zero crossing.

`tearing_state`

tearing_state: cache for intermediate tearing state

`substitutions`

substitutions: substitutions generated by tearing.

**Example**

```
using ModelingToolkit
@parameters σ ρ β
@variables t x(t) y(t) z(t)
D = Differential(t)
eqs = [D(x) ~ σ*(y-x),
D(y) ~ x*(ρ-z)-y,
D(z) ~ x*y - β*z]
@named de = ODESystem(eqs,t,[x,y,z],[σ,ρ,β])
```

## Composition and Accessor Functions

`get_eqs(sys)`

or`equations(sys)`

: The equations that define the ODE.`get_states(sys)`

or`states(sys)`

: The set of states in the ODE.`get_ps(sys)`

or`parameters(sys)`

: The parameters of the ODE.`get_iv(sys)`

: The independent variable of the ODE.

## Transformations

Missing docstring for `structural_simplify`

. Check Documenter's build log for details.

`ModelingToolkit.ode_order_lowering`

— Function```
ode_order_lowering(sys::ODESystem) -> Any
```

Takes a Nth order ODESystem and returns a new ODESystem written in first order form by defining new variables which represent the N-1 derivatives.

`ModelingToolkit.StructuralTransformations.dae_index_lowering`

— Function`dae_index_lowering(sys::ODESystem; kwargs...) -> ODESystem`

Perform the Pantelides algorithm to transform a higher index DAE to an index 1 DAE. `kwargs`

are forwarded to `pantelides!`

. End users are encouraged to call `structural_simplify`

instead, which calls this function internally.

`ModelingToolkit.liouville_transform`

— Function```
liouville_transform(sys::ModelingToolkit.AbstractODESystem)
```

Generates the Liouville transformed set of ODEs, which is the original ODE system with a new variable `trJ`

appended, corresponding to the -tr(Jacobian). This variable is used for properties like uncertainty propagation from a given initial distribution density.

For example, if $u'=p*u$ and `p`

follows a probability distribution $f(p)$, then the probability density of a future value with a given choice of $p$ is computed by setting the inital `trJ = f(p)`

, and the final value of `trJ`

is the probability of $u(t)$.

Example:

```
using ModelingToolkit, OrdinaryDiffEq, Test
@parameters t α β γ δ
@variables x(t) y(t)
D = Differential(t)
eqs = [D(x) ~ α*x - β*x*y,
D(y) ~ -δ*y + γ*x*y]
sys = ODESystem(eqs)
sys2 = liouville_transform(sys)
@variables trJ
u0 = [x => 1.0,
y => 1.0,
trJ => 1.0]
prob = ODEProblem(sys2,u0,tspan,p)
sol = solve(prob,Tsit5())
```

Where `sol[3,:]`

is the evolution of `trJ`

over time.

Sources:

Probabilistic Robustness Analysis of F-16 Controller Performance: An Optimal Transport Approach

Abhishek Halder, Kooktae Lee, and Raktim Bhattacharya https://abhishekhalder.bitbucket.io/F16ACC2013Final.pdf

Missing docstring for `alias_elimination`

. Check Documenter's build log for details.

Missing docstring for `tearing`

. Check Documenter's build log for details.

## Analyses

Missing docstring for `ModelingToolkit.islinear`

. Check Documenter's build log for details.

Missing docstring for `ModelingToolkit.isautonomous`

. Check Documenter's build log for details.

Missing docstring for `ModelingToolkit.isaffine`

. Check Documenter's build log for details.

## Applicable Calculation and Generation Functions

```
calculate_jacobian
calculate_tgrad
calculate_factorized_W
generate_jacobian
generate_tgrad
generate_factorized_W
jacobian_sparsity
```

## Standard Problem Constructors

`SciMLBase.ODEFunction`

— Type```
function DiffEqBase.ODEFunction{iip}(sys::AbstractODESystem, dvs = states(sys),
ps = parameters(sys);
version = nothing, tgrad=false,
jac = false,
sparse = false,
kwargs...) where {iip}
```

Create an `ODEFunction`

from the `ODESystem`

. The arguments `dvs`

and `ps`

are used to set the order of the dependent variable and parameter vectors, respectively.

`SciMLBase.ODEProblem`

— Type```
function DiffEqBase.ODEProblem{iip}(sys::AbstractODESystem,u0map,tspan,
parammap=DiffEqBase.NullParameters();
version = nothing, tgrad=false,
jac = false,
checkbounds = false, sparse = false,
simplify=false,
linenumbers = true, parallel=SerialForm(),
kwargs...) where iip
```

Generates an ODEProblem from an ODESystem and allows for automatically symbolically calculating numerical enhancements.

Missing docstring for `SteadyStateFunction`

. Check Documenter's build log for details.

`SciMLBase.SteadyStateProblem`

— Type```
function DiffEqBase.SteadyStateProblem(sys::AbstractODESystem,u0map,
parammap=DiffEqBase.NullParameters();
version = nothing, tgrad=false,
jac = false,
checkbounds = false, sparse = false,
linenumbers = true, parallel=SerialForm(),
kwargs...) where iip
```

Generates an SteadyStateProblem from an ODESystem and allows for automatically symbolically calculating numerical enhancements.

## Torn Problem Constructors

`ModelingToolkit.StructuralTransformations.ODAEProblem`

— Type`ODAEProblem{iip}(sys, u0map, tspan, parammap = DiffEqBase.NullParameters(); kw...)`

This constructor acts similar to the one for `ODEProblem`

with the following changes: `ODESystem`

s can sometimes be further reduced if `structural_simplify`

has already been applied to them. This is done this constructor. In these cases, the constructor uses the knowledge of the strongly connected components calculated during the process of simplification as the basis for building pre-simplified nonlinear systems in the implicit solving. In summary: these problems are structurally modified, but could be more efficient and more stable. Note, the returned object is still of type `ODEProblem`

.