This plugin is intended to gather several tools for the simulation and analysis of ODEs.
Currently, it contains a single program
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
--with-ode in the configure step:
ibex$ ./waf configure --with-optim --with-ode --lp-lib=soplex ibex$ sudo ./waf install
ibexode-attract-region is then installed by default
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
timeout option (try
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) 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
- 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
- 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:
2- compile the programs (from this directory):
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