Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

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


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.


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


$ ./optim-scalable examples/scalable/Scalable2_ 2 10 1e-3 10


Plugin for the analysis of dynamical systems (ordinary differential equations)







No releases published


No packages published