Fetching contributors…
Cannot retrieve contributors at this time
131 lines (82 sloc) 4.55 KB

# ODE plugin

This plugin is intended to gather several tools for the simulation and analysis of ODEs.

Currently, it contains a single program `ibexode-attract-region`, that allows to calculate a region inside which all points converge to an (exponentially) stable point of a dynamical system.

The principle is as follows.

The user gives as input:

• an ODE under the form x'=f(x);
• a Lyapunov function v(x);
• an approximation of the fixpoint x* of f;

and the program finds an attracting region for the considered fixpoint: any solution trajectory of the ODE starting inside this region is proven to converge to this fixpoint.

The region is returned as a sub-level set of the Lyapunov function, that is, a set described by an inequality v(x)<=c. So the programs actually just returns a scalar: the value of "c".

For further details, see the paper:

```Estimating the Robust Domain of Attraction for Non-Smooth Systems using an Interval Lyapunov Equation
by A. Goldsztejn and G. Chabert
in Automatica, Vol. 100, pp. 371-377, Elsevier, 2019
```

## Installation

Just use `--with-ode` in the configure step:

```ibex\$ ./waf configure --with-optim --with-ode --lp-lib=soplex
ibex\$ sudo ./waf install
```

The executable `ibexode-attract-region` is then installed by default on the `bin/` folder of IBEX.

The examples of the paper cited above are all in the `examples/` subfolder of this plugin.

## Usage

Try for instance:

```ibex\$ ./ibexode-attract-region plugins/ode/examples/Example1.txt
```

The output is:

```c_dichotomy_derivative= [0.0247955322265624, 0.02481460571289053] t=1.742ms
c_dichotomy_hansen=     [0.05653381347656235, 0.05657196044921861] t=1.71101ms
c_dichotomy_hessian=    [0.009870529174804626, 0.00988006591796869] t=2.65201ms
c_optimizer=            [0.3208558139611485, 0.3211766697751097] t=39.3421ms

A point x such that v(x-x*)=c and v'(x-x*)>0:
(0.461418 ; 0.329046 ; 0.321177)
```

The 4 first lines gives the estimated value of "c" by 4 different methods. Each time, the value of "c" is given under the form of a rigorous enclosing interval but only the lower bound should actually be of interest for you. The more interesting estimation is of course the last one, `c_optimizer`, as it is larger than all others. However, the optimizer-based method can be prohibitively long when the dimension of the problem increases. For this reason, it is recommended to run `ibexode-attract-region` with the `timeout` option (try `ibexode-attract-region --help`).

The last line of the output gives a point that violates the non-positiveness of the Lie derivative.

To use this executable on your own problem, just copy-paste one of the Minibex examples and adapt it to your problem.

In more details, the input Minibex file of `ibexode-attract-region` must contain the declaration of:

• A function f(x) that represents your vector field, i.e. the mapping of your ODE x'=f(x). Note that x can be a vector argument of any size. So you can declare a function f(x[3]) for instance . The function f can also have an extra argument "theta" (i.e. we have `f(x[...],theta[...])`) if your vector field has an uncertain parameter "theta". This argument can also be a vector. See the paper for more details on how uncertainty is considered in this tool. An example problem with uncertain parameter is `MicrobialGrowthProcess.txt`.
• A function v(x) that represents the chosen Lyapunov function.
• A quadratic function vminor(x) minoring v(x), if v(x) is not already quadratic. The function vminor is ignored if v is already quadratic. An example problem with non-quadratic Lyapunov function is `Hu2005-4.txt`.
• A (vector) variable x with an approximation of the fixpoint as domain. The variable is declared just as in a standard Minibex system of equations.
• Optionally, a (vector) variable theta if the system has an uncertain parameter theta, with potentially an initial domain
• Optionally, constraints on the uncertain parameter theta, in complement with the initial domain

To run the scalable "academic benchmark" of the paper:

1- move to the plugin folder:

```ibex\$ cd plugins/ode
```

1- set the PKG_CONFIG_PATH variable:

```export PKG_CONFIG_PATH=[path-to-ibex]/share/pkgconfig
```

2- compile the programs (from this directory):

```\$ make
```

4- run the programs. Example:

```\$ ./dicho-scalable examples/scalable/Scalable2_ 2 10 1e-3 10

or

\$ ./optim-scalable examples/scalable/Scalable2_ 2 10 1e-3 10
```
You can’t perform that action at this time.