From bc1ed97255bdbb2c182699ddb39ceeaa80efba59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zden=C4=9Bk=20Hur=C3=A1k?= Date: Mon, 27 Jan 2025 17:46:41 +0100 Subject: [PATCH] Built site for gh-pages --- .nojekyll | 2 +- classes_reset.html | 136 +- classes_switched.html | 60 +- complementarity_simulations.html | 1680 +- des_automata.html | 16 +- hybrid_automata.html | 2 +- .../rimless_wheel_automaton.png | Bin 58372 -> 58259 bytes hybrid_equations.html | 156 +- max_plus_algebra.html | 13008 ++++++++-------- mld_mld_and_pwa.html | 60 +- mpc_mld_explicit.html | 140 +- search.json | 18 +- sitemap.xml | 14 +- stability_concepts.html | 4 +- stability_recap.html | 6 +- stability_via_common_lyapunov_function.html | 2 +- stability_via_multiple_lyapunov_function.html | 4 +- verification_barrier.html | 2772 ++-- 18 files changed, 9040 insertions(+), 9040 deletions(-) diff --git a/.nojekyll b/.nojekyll index 3631f45..2e708d6 100644 --- a/.nojekyll +++ b/.nojekyll @@ -1 +1 @@ -f63be0ef \ No newline at end of file +1b4ccf87 \ No newline at end of file diff --git a/classes_reset.html b/classes_reset.html index 06b1d55..3399fe7 100644 --- a/classes_reset.html +++ b/classes_reset.html @@ -782,49 +782,49 @@

Reset systems

- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -862,53 +862,53 @@

Clegg’s integrator - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/classes_switched.html b/classes_switched.html index 858a86b..67c749d 100644 --- a/classes_switched.html +++ b/classes_switched.html @@ -831,46 +831,46 @@

State-dependent - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + @@ -1018,7 +1018,7 @@

x(t) is more than just continuous (even more than uniformly continuous) but less than contiuously differentiable (aka \mathcal C^1) – it is absolutely continuous. Absolutely continuous function is a solution of the integral equation (indeed, an equation) x(t) = x(t_0) + \int_{t_0}^t f(x(\tau),\tau)\mathrm{d}\tau,
where we use Lebesgue integral (instead of Riemann).

Having referred to absolute continuity and Lebesgue integral, the discussion could quickly become rather technical. But all we want to say is that f can be “some kind of discontinuous” with respect to t. In particular, it must be measurable wrt t, which again seems to start escalating… But it suffices to say that it includes the case when f(x,t) is piecewise continuous with respect to t (sampled data control with ZOH).

-

Needles to say that for a continuous f, solutions x are just classical (smooth).

+

Needless to say, for a continuous f, solutions x are just classical (smooth).

If the function f is discontinuous with respect to x, some more concepts of a solution need to be invoked so that existence and uniqueness can be analyzed.

Example 6 (Some more examples of nonexistence and nonuniqueness of solutions) The system with a discontinuous RHS diff --git a/complementarity_simulations.html b/complementarity_simulations.html index 35efd58..0d1e145 100644 --- a/complementarity_simulations.html +++ b/complementarity_simulations.html @@ -757,46 +757,46 @@

Simulations of complementarity systems using time-stepping

- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + +
@@ -817,49 +817,49 @@

Simulations of complementarity systems using time-stepping

- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + +
@@ -938,48 +938,48 @@

Forward - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + +
@@ -1154,54 +1154,54 @@

9 possible combinati - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
@@ -1284,56 +1284,56 @@

Another combination - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
@@ -1387,62 +1387,62 @@

All nine regions

- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
@@ -1503,80 +1503,80 @@

Solutions usi - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Figure 8: Solution trajectory for a discontinuous system obtained by the MCP solver @@ -1622,255 +1622,255 @@

Solutions usi - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Figure 9: Solution trajectory for a discontinuous system obtained by the MCP solver with a smaller step size @@ -1964,253 +1964,253 @@

Solutions usi - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Note, once again, the amazingly small number of steps

@@ -2324,107 +2324,107 @@

Solutions usi - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Once again, we can see that the method correctly simulates the system coming to a complete stop due to friction.

diff --git a/des_automata.html b/des_automata.html index 0d5439d..314e719 100644 --- a/des_automata.html +++ b/des_automata.html @@ -2143,16 +2143,16 @@

Mealy machine

@show update!(dtr), output(dtr)
-
x_initial = rand(0:k, n) = [0, 4, 0, 4]
-output(dtr) = [0, 1, 1, 1]
-(update!(dtr), output(dtr)) = ([0, 0, 4, 0], [1, 0, 1, 1])
-(update!(dtr), output(dtr)) = ([1, 0, 0, 4], [0, 1, 0, 1])
-(update!(dtr), output(dtr)) = ([1, 1, 0, 0], [0, 0, 1, 0])
-(update!(dtr), output(dtr)) = ([1, 1, 1, 0], [0, 0, 0, 1])
-(update!(dtr), output(dtr)) = ([1, 1, 1, 1], [1, 0, 0, 0])
+
x_initial = rand(0:k, n) = [4, 2, 3, 3]
+output(dtr) = [0, 1, 1, 0]
+(update!(dtr), output(dtr)) = ([4, 4, 2, 3], [0, 0, 1, 1])
+(update!(dtr), output(dtr)) = ([4, 4, 4, 2], [0, 0, 0, 1])
+(update!(dtr), output(dtr)) = ([4, 4, 4, 4], [1, 0, 0, 0])
+(update!(dtr), output(dtr)) = ([1, 4, 4, 4], [0, 1, 0, 0])
+(update!(dtr), output(dtr)) = ([1, 1, 4, 4], [0, 0, 1, 0])
-
([1, 1, 1, 1], [1, 0, 0, 0])
+
([1, 1, 4, 4], [0, 0, 1, 0])

We can see that although initially the there can be more tokens, after a few iterations the algorithm achieves the goal of having just one token in the ring.

diff --git a/hybrid_automata.html b/hybrid_automata.html index 9bec34a..897cbcb 100644 --- a/hybrid_automata.html +++ b/hybrid_automata.html @@ -765,7 +765,7 @@

Hybrid automata

Example 1 (Thermostat – the hello world example of a hybrid automaton) The thermostat is a device that turns some heater on or off (or sets some valve open or closed) based on the sensed temperature. The goal is to keep the temperature around, say, 18^\circ C.

Naturally, the discrete states (modes, locations) are on and off. Initially, the heater is off. We can identify the first two components of the hybrid automaton: \mathcal Q = \{\text{on}, \text{off}\}, \quad \mathcal Q_0 = \{\text{off}\}

-

The only continuous state variable is the temperature. The initial temperature not not quite certain, say it is known to be in the interval [5,10]. Two more components of the hybrid automaton follow: \mathcal X = \mathbb R, \quad \mathcal X_0 = \{x:x\in \mathcal X, 5\leq x\leq 10\}

+

The only continuous state variable is the temperature. The initial temperature is not quite certain, say, it is known to be in the interval [5,10]. Two more components of the hybrid automaton follow: \mathcal X = \mathbb R, \quad \mathcal X_0 = \{x:x\in \mathcal X, 5\leq x\leq 10\}

In the two modes on and off, the evolution of the temperature can be modelled by two different ODEs. Either from first-principles modelling or from system identification (or preferrably from the combination of the two) we get the two differential equations, say: f_\text{off}(x) = -0.1x,\quad f_\text{on}(x) = -0.1x + 5, which gives another component for the hybrid automaton.

diff --git a/hybrid_automata_figures/rimless_wheel_automaton.png b/hybrid_automata_figures/rimless_wheel_automaton.png index c93937873612e153ceb834cef1f8952d37a350c7..d7f8e23ff34571e2b8a1aac24d42c89d055abbd9 100644 GIT binary patch delta 35995 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 v$KFG0Fy2P%Fi5Kk delta 36098 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 iW@ct)W@cvA?fxG)-bt^R6L^~d0000|\theta|<\frac{\pi}{2}. It is impossible to get \bm f(\bm x, \bm u) = \begin{bmatrix} 0\\ f_2 \\ 0\end{bmatrix}, \; f_2\neq 0. Hence, stabilization by a continuous feedback \bm u = \kappa (\bm x) is impossible.

-

But it is possible to stabilize the vehicle using a discontinuous feedback. And discontinuous feedback controllr can be viewed as switching control, which in turn can be seen as instance of a hybrid controller.

+

But it is possible to stabilize the vehicle using a discontinuous feedback. And discontinuous feedback controller can be viewed as switching control, which in turn can be seen as instance of a hybrid controller.

Example 7 (Global asymptotic stabilization on a circle) We now give a demonstration of a general phenomenon of stabilization on a manifold. We will see that even if asymptotic stabilization by a continuous feedback is possible, it may not be possible to guarantee it globally.

@@ -1189,57 +1189,57 @@

- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Figure 7: Simulation of stabilization on a circle using a hybrid controller @@ -1263,54 +1263,54 @@

- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Figure 8: Simulation of stabilization on a circle using a hybrid controller diff --git a/max_plus_algebra.html b/max_plus_algebra.html index 92b33ea..01b5d9a 100644 --- a/max_plus_algebra.html +++ b/max_plus_algebra.html @@ -902,43 +902,43 @@

( - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + @@ -964,3255 +964,3255 @@

( - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -4238,3257 +4238,3257 @@

( - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mld_mld_and_pwa.html b/mld_mld_and_pwa.html index 77ea839..972e1ee 100644 --- a/mld_mld_and_pwa.html +++ b/mld_mld_and_pwa.html @@ -875,47 +875,47 @@

Examples

- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/mpc_mld_explicit.html b/mpc_mld_explicit.html index c6d5aa8..d75e468 100644 --- a/mpc_mld_explicit.html +++ b/mpc_mld_explicit.html @@ -790,53 +790,53 @@

E - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

and a piecewise quadratic cost function J^\ast(x) @@ -857,51 +857,51 @@

E - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/search.json b/search.json index 723b5c7..99e58b0 100644 --- a/search.json +++ b/search.json @@ -191,7 +191,7 @@ "href": "stability_recap.html#equilibrium", "title": "Recap of stability analysis for continuous dynamical systems", "section": "Equilibrium", - "text": "Equilibrium\nLoosely speaking, equilibrium is a state at which the system can rest indefinitely when undisturbed by external disturbances. More technically speaking, equilibrium is a point in the state space, that is, a vector \\bm x_\\mathrm{eq}\\in \\mathbb R^n, at which the vector field \\mathbf f vanishes, that is,\n\\mathbf f(\\bm x_\\mathrm{eq}) = \\mathbf 0.\nWithout loss of generality we often assume that \\bm x_\\mathrm{eq} = \\mathbf 0, because if the equilibrium is considered anywhere else than at the origin, we can alway introduce a new shifted state vector \\bm x_\\mathrm{new}(t) = \\bm x(t) - \\bm x_\\mathrm{eq}.\n\n\n\n\n\n\nAn equilibrium and not a system is what we analyze for stability\n\n\n\nAlthough every now and then we may hear the term stability attributed to a system, strictly speaking it is an equilibrium that is stable or unstable. For linear systems, there is not need to distinguish between the two, for nonlinear systems it can easily happen that some equilibrium is stable while some other is unstable.", + "text": "Equilibrium\nLoosely speaking, equilibrium is a state at which the system can rest indefinitely when undisturbed by external disturbances. More technically speaking, equilibrium is a point in the state space, that is, a vector \\bm x_\\mathrm{eq}\\in \\mathbb R^n, at which the vector field \\mathbf f vanishes, that is,\n\\mathbf f(\\bm x_\\mathrm{eq}) = \\mathbf 0.\nWithout loss of generality we often assume that \\bm x_\\mathrm{eq} = \\mathbf 0, because if the equilibrium is considered anywhere else than at the origin, we can always introduce a new shifted state vector \\bm x_\\mathrm{new}(t) = \\bm x(t) - \\bm x_\\mathrm{eq}.\n\n\n\n\n\n\nAn equilibrium and not a system is what we analyze for stability\n\n\n\nAlthough every now and then we may hear the term stability attributed to a system, strictly speaking it is an equilibrium that is stable or unstable. For linear systems, there is not need to distinguish between the two, for nonlinear systems it can easily happen that some equilibrium is stable while some other is unstable.", "crumbs": [ "8. Stability", "Recap of stability analysis for continuous dynamical systems" @@ -224,7 +224,7 @@ "href": "stability_recap.html#asymptotic-stability", "title": "Recap of stability analysis for continuous dynamical systems", "section": "Asymptotic stability", - "text": "Asymptotic stability\nCombination of Lyapunov stability and attractivity is called assymptotic stability.\nIf the attractivity is global, the assymptotic stability is called global too.", + "text": "Asymptotic stability\nCombination of Lyapunov stability and attractivity is called asymptotic stability.\nIf the attractivity is global, the asymptotic stability is called global too.", "crumbs": [ "8. Stability", "Recap of stability analysis for continuous dynamical systems" @@ -521,7 +521,7 @@ "href": "stability_concepts.html#equilibrium-of-a-hybrid-system-modelled-by-a-hybrid-automaton", "title": "Stability of hybrid systems", "section": "Equilibrium of a hybrid system modelled by a hybrid automaton", - "text": "Equilibrium of a hybrid system modelled by a hybrid automaton\nFirst, an equilibrium of a hybrid automaton is a point \\bm x_\\mathrm{eq} in the continuous state space \\mathcal X\\subset \\mathbb R^n.\n\n\n\n\n\n\nNote\n\n\n\nAlthough we often assume the equilibrium at the origin, that is, \\bm x_\\mathrm{eq} = \\mathbf 0, the assumption does not have to be invoked in order to provide the definition.\n\n\nWe now consider a hybrid automaton for which the dynamics of each individual mode q is given by \\dot{\\bm x} = \\mathbf f_q(\\bm x). The invariants (or domains) of each mode are \\mathcal X_q, \\, q=1, \\ldots, m.\nThe definition of the equilibrium \\bm x_\\mathrm{eq} that is ofter found in the literature imposes these two conditions:\n\n\\mathbf 0 = \\mathbf f_q(\\bm x_\\mathrm{eq}) for all q\\in \\mathcal Q,\nthe reset map r(q,q',\\bm x_\\mathrm{eq}) = \\bm x_\\mathrm{eq}.\n\nThe first condition states that the point in the continuous state space should qualify as an equilibrium for each mode. This might appear unnecessarily restrictive (what if the particular \\bm x_\\mathrm{eq} is not an element of \\mathcal X_q for all q?) as we discuss later. But note that this definition appears in several resources. For example, in the definition 4.9 in the section 4.2 in [1] or the definition 8.2 in the section 8.2 in (no longer available online) [2].\nThe second condition states that the system can be regarded as resting at the equlibrium even if it jumps from one discrete state (mode) to another (while staying in the equilibrium continuous state).", + "text": "Equilibrium of a hybrid system modelled by a hybrid automaton\nFirst, an equilibrium of a hybrid automaton is a point \\bm x_\\mathrm{eq} in the continuous state space \\mathcal X\\subset \\mathbb R^n.\n\n\n\n\n\n\nNote\n\n\n\nAlthough we often assume the equilibrium at the origin, that is, \\bm x_\\mathrm{eq} = \\mathbf 0, the assumption does not have to be invoked in order to provide the definition.\n\n\nWe now consider a hybrid automaton for which the dynamics of each individual mode q is given by \\dot{\\bm x} = \\mathbf f_q(\\bm x). The invariants (or domains) of each mode are \\mathcal X_q, \\, q=1, \\ldots, m.\nThe definition of the equilibrium \\bm x_\\mathrm{eq} that is often found in the literature imposes these two conditions:\n\n\\mathbf 0 = \\mathbf f_q(\\bm x_\\mathrm{eq}) for all q\\in \\mathcal Q,\nthe reset map r(q,q',\\bm x_\\mathrm{eq}) = \\bm x_\\mathrm{eq}.\n\nThe first condition states that the point in the continuous state space should qualify as an equilibrium for each mode. This might appear unnecessarily restrictive (what if the particular \\bm x_\\mathrm{eq} is not an element of \\mathcal X_q for all q?) as we discuss later. But note that this definition appears in several resources. For example, in the definition 4.9 in the section 4.2 in [1] or the definition 8.2 in the section 8.2 in (no longer available online) [2].\nThe second condition states that the system can be regarded as resting at the equlibrium even if it jumps from one discrete state (mode) to another (while staying in the equilibrium continuous state).", "crumbs": [ "8. Stability", "Stability of hybrid systems" @@ -532,7 +532,7 @@ "href": "stability_concepts.html#equilibrium-of-a-hybrid-system-modelled-by-hybrid-equations", "title": "Stability of hybrid systems", "section": "Equilibrium of a hybrid system modelled by hybrid equations", - "text": "Equilibrium of a hybrid system modelled by hybrid equations\nThe state vector within this modelling framework is composed by both the discrete and continuous state variables. The two conditions for the equilibrium of a hybrid automata can be translated into the hybrid equation framework, which means that the equilibrium is not just a single point but rather a set of points.\n\nExample 1 (Equilibrium of a hybrid system modelled by hybrid equations) Consider a hybrid system modelled by hybrid equations, for which the state space is given by \\mathcal X = \\{0,1\\} \\times \\mathbb R. The dynamics of the system is given by\n\nThis makes the analysis significantly more challenging. Therefore, in our lecture we will only consider stability of hybrid automata.", + "text": "Equilibrium of a hybrid system modelled by hybrid equations\nThe state vector within this modelling framework is composed by both the discrete and continuous state variables. The two conditions for the equilibrium of a hybrid automata can be translated into the hybrid equation framework, which means that the equilibrium is not just a single point but rather a set of points.\n\nExample 1 (Equilibrium of a hybrid system modelled by hybrid equations) Consider a hybrid system modelled by hybrid equations, for which the state space is given by \\mathcal X = \\{0,1\\} \\times \\mathbb R. The dynamics of the system is given by [TBD]\n\nThis makes the analysis significantly more challenging. Therefore, in our lecture we will only consider stability of hybrid automata.", "crumbs": [ "8. Stability", "Stability of hybrid systems" @@ -829,7 +829,7 @@ "href": "classes_switched.html#conditions-for-existence-and-uniqueness-of-solutions-of-ode", "title": "Switched systems", "section": "Conditions for existence and uniqueness of solutions of ODE", - "text": "Conditions for existence and uniqueness of solutions of ODE\nIn order to analyze the situations such as the previous example, we need to recapitulate some elementary facts about the existence and uniqueness of solutions of ordinary differential equations (ODEs). And then we are going to add some new stuff.\nConsider the ODE\n\\dot x(t) = f(x(t),t).\nWe ask the following two questions:\n\nUnder which conditions does a solution exists?\nUnder which conditions is the solution unique?\n\nTo answer both, the function f() must be analyzed.\nBut before we answer the two questions, we must ask another one that is even more fundamental:\n\nWhat does it mean that a function x(t) is a solution of the the ODE?\n\nHowever trivial this question may seem, an answer can escalate rather quickly – there are actually several concepts of a solution of an ordinary differential equation.\n\nClassical solution (Peano, also Cauchy-Peano)\nWe assume that f(x(t),t) is continuous with respect to both x and t. Then existence of a solution is guaranteed locally (on some finite interval), but uniqueness is not.\n\n\n\n\n\n\nNot guaranteed does not mean impossible\n\n\n\nUniqueness is not not excluded in all cases, it is just that it is not guaranteed.\n\n\nA solution is guaranteed to be continuously differentiable ( x\\in\\mathrm C^1 ). Such function x(t) satisfies the ODE \\dot x(t) = f(x(t),t) \\; \\forall t, that is why such solution is called classical.\n\nExample 4 An example of a solution that exists only on a finite interval is \n \\dot x(t) = x^2(t),\\; x(0) = 1,\n\nfor which the solution is x(t) = \\frac{1}{1-t} . The solution blows up at t=1 .\n\n\nExample 5 An example of nonuniqueness is provided by \\dot x(t) = \\sqrt{x(t)}, \\; x(0) = 0.\nOne possible solution is x(t) = \\frac{1}{4}t^2. Another is x(t) = 0. Yet another example is x(t) = \\frac{1}{4}(t-t_0)^2. It is related to the Leaky bucket example.\n\n\n\nStrengthening the requirement of continuity (Pickard-Lindelöf)\nSince continuity of f(x(t),t) was not enough to guarantee uniqueness, we need to impose a stricter condition on f(). Namely, we impose a stricter condition on f() with respect to x – Lipschitz continuity, while we still require that the function be continuous with respect to t.\nNow it is not only existence but also uniqueness of a solution that is guaranteed.\n\n\n\n\n\n\nUniqueness not guaranteed does not mean it is impossible\n\n\n\nSimilarly as with Peano conditions, here too the condition is not necessary, it is just sufficient – even if the function f is not Lipschitz continuous, there may exist a unique solution.\n\n\nSince the condition is stricter than mere continuity, whatever goodies hold here too. In particular, the solution is guaranteed to be continuously differentiable.\nIf the function is only locally Lipschitz, the solution is guaranteed on some finite interval. If the function is (globally) Lipschitz, the solution is guaranteed on an unbounded interval.\n\n\nExtending the set of solutions (Carathéodory)\nIn contrast with the classical solution, we can allow the solution x(t) to fail to satisfy the ODE at some isolated points in time. This is called Carathéodory (or extended) solution.\nCarathéodory solution x(t) is more than just continuous (even more than uniformly continuous) but less than contiuously differentiable (aka \\mathcal C^1) – it is absolutely continuous. Absolutely continuous function is a solution of the integral equation (indeed, an equation) x(t) = x(t_0) + \\int_{t_0}^t f(x(\\tau),\\tau)\\mathrm{d}\\tau,\nwhere we use Lebesgue integral (instead of Riemann).\nHaving referred to absolute continuity and Lebesgue integral, the discussion could quickly become rather technical. But all we want to say is that f can be “some kind of discontinuous” with respect to t. In particular, it must be measurable wrt t, which again seems to start escalating… But it suffices to say that it includes the case when f(x,t) is piecewise continuous with respect to t (sampled data control with ZOH).\nNeedles to say that for a continuous f, solutions x are just classical (smooth).\nIf the function f is discontinuous with respect to x, some more concepts of a solution need to be invoked so that existence and uniqueness can be analyzed.\n\nExample 6 (Some more examples of nonexistence and nonuniqueness of solutions) The system with a discontinuous RHS \n\\begin{aligned}\n\\dot x_1 &= -2x_1 - 2x_2\\operatorname*{sgn(x_1)},\\\\\n\\dot x_2 &= x_2 + 4x_1\\operatorname*{sgn(x_1)}\n\\end{aligned}\n can be reformulated as a switched system \n\\begin{aligned}\n\\dot{\\bm x} &= \\begin{bmatrix}-2 & 2\\\\-4 & 1\\end{bmatrix}\\begin{bmatrix}x_1\\\\ x_2\\end{bmatrix}, \\quad s(\\bm x)\\leq 0\\\\\n\\dot{\\bm x} &= \\begin{bmatrix}-2 & -2\\\\4 & 1\\end{bmatrix}\\begin{bmatrix}x_1\\\\ x_2\\end{bmatrix}, \\quad s(\\bm x)> 0,\n\\end{aligned}\n where the switching function is s(\\bm x) = x_1.\n\n\nShow the code\ns(x) = x[1]\n\nf₁(x) = [-2x[1] + 2x[2], x[2] - 4x[1]]\nf₂(x) = [-2x[1] - 2x[2], x[2] + 4x[1]]\n\nf(x) = s(x) <= 0.0 ? f₁(x) : f₂(x) \n\nusing CairoMakie\nfig = Figure(size = (600, 600),fontsize=20)\nax = Axis(fig[1, 1], xlabel = \"x₁\", ylabel = \"x₂\")\nstreamplot!(ax,x->Point2f(f(x)), -1.5..1.5, -1.5..1.5, colormap = :magma)\nvlines!(ax,0; ymin = -1.1, ymax = 1.1, color = :red)\nfig\n\n\n\n\n\n\n\n\n\n\n\n\nSliding mode dynamics (on simple boundaries)\nThe previous example provided yet another illustration of a phenomenon of sliding, or a sliding mode. We say that there is an attractive sliding mode at \\bm x_\\mathrm{s}, if there is a trajectory that ends at \\bm x_\\mathrm{s}, but no trajectory that starts at \\bm x_\\mathrm{s}.\n\n\nGeneralized solutions (Filippov)\nIt is now high time to introduce yet another concept of a solution. A concept that will make it possible to model the sliding mode dynamics in a more rigorous way. Remember that when the state \\bm x(t) slides along the boundary, it qualifies as a solution to neither of the two state equations in any sense we have discussed so far. But now comes the concept of Fillipov solution.\n\\bm x() is a Filippov solution on [t_0,t_1] if for almost all t \n\\dot{\\bm{x}}(t) \\in \\overline{\\operatorname*{co}}\\{\\mathbf f(\\bm x(t),t)\\},\n where \\overline{\\operatorname*{co}} denotes the (closed) convex hull.\n\nExample 7 Consider the model in the previous example. The switching surface, along which the solution slides, is given by \\mathcal{S}^+ = \\{\\bm x \\mid x_1=0 \\land x_2\\geq 0\\}.\nNow, Filippov solution must satisfy the following differential inclusion \n\\begin{aligned}\n\\dot{\\bm x}(t) &\\in \\overline{\\operatorname*{co}}\\{\\bm A_1\\bm x_1(t), \\bm A_2\\bm x_2(t)\\}\\\\\n&= \\alpha_1(t) \\bm A_1\\bm x_1(t) + \\alpha_2(t) \\bm A_2\\bm x_2(t),\n\\end{aligned}\n where \\alpha_1(t), \\alpha_2(t) \\geq 0, \\alpha_1(t) + \\alpha_2(t) = 1.\nNote, however, that not all the weights keep the solution on \\mathcal S^+. We must impose some restriction, namely that \\dot x_1 = 0 for \\bm x(t) \\in \\mathcal S^+. This leads to \n\\alpha_1(t) [-2x_1 + 2x_2] + \\alpha_2(t) [-2x_1 - 2x_2] = 0\n\nCombining this with \\alpha_1(t) + \\alpha_2(t) = 1 gives \n\\alpha_1(t) = \\alpha_2(t) = 1/2,\n which in this simple case perhaps agrees with our intuition (the average of the two vector fields).\nThe dynamics on the sliding mode is modelled by \n\\dot x_1 = 0, \\quad \\dot x_2 = x_2, \\quad \\bm x \\in \\mathcal{S}^+.\n\n\n\n\n\n\n\n\nPossible nonuniqueness on intersection of boundaries\n\n\n\n…", + "text": "Conditions for existence and uniqueness of solutions of ODE\nIn order to analyze the situations such as the previous example, we need to recapitulate some elementary facts about the existence and uniqueness of solutions of ordinary differential equations (ODEs). And then we are going to add some new stuff.\nConsider the ODE\n\\dot x(t) = f(x(t),t).\nWe ask the following two questions:\n\nUnder which conditions does a solution exists?\nUnder which conditions is the solution unique?\n\nTo answer both, the function f() must be analyzed.\nBut before we answer the two questions, we must ask another one that is even more fundamental:\n\nWhat does it mean that a function x(t) is a solution of the the ODE?\n\nHowever trivial this question may seem, an answer can escalate rather quickly – there are actually several concepts of a solution of an ordinary differential equation.\n\nClassical solution (Peano, also Cauchy-Peano)\nWe assume that f(x(t),t) is continuous with respect to both x and t. Then existence of a solution is guaranteed locally (on some finite interval), but uniqueness is not.\n\n\n\n\n\n\nNot guaranteed does not mean impossible\n\n\n\nUniqueness is not not excluded in all cases, it is just that it is not guaranteed.\n\n\nA solution is guaranteed to be continuously differentiable ( x\\in\\mathrm C^1 ). Such function x(t) satisfies the ODE \\dot x(t) = f(x(t),t) \\; \\forall t, that is why such solution is called classical.\n\nExample 4 An example of a solution that exists only on a finite interval is \n \\dot x(t) = x^2(t),\\; x(0) = 1,\n\nfor which the solution is x(t) = \\frac{1}{1-t} . The solution blows up at t=1 .\n\n\nExample 5 An example of nonuniqueness is provided by \\dot x(t) = \\sqrt{x(t)}, \\; x(0) = 0.\nOne possible solution is x(t) = \\frac{1}{4}t^2. Another is x(t) = 0. Yet another example is x(t) = \\frac{1}{4}(t-t_0)^2. It is related to the Leaky bucket example.\n\n\n\nStrengthening the requirement of continuity (Pickard-Lindelöf)\nSince continuity of f(x(t),t) was not enough to guarantee uniqueness, we need to impose a stricter condition on f(). Namely, we impose a stricter condition on f() with respect to x – Lipschitz continuity, while we still require that the function be continuous with respect to t.\nNow it is not only existence but also uniqueness of a solution that is guaranteed.\n\n\n\n\n\n\nUniqueness not guaranteed does not mean it is impossible\n\n\n\nSimilarly as with Peano conditions, here too the condition is not necessary, it is just sufficient – even if the function f is not Lipschitz continuous, there may exist a unique solution.\n\n\nSince the condition is stricter than mere continuity, whatever goodies hold here too. In particular, the solution is guaranteed to be continuously differentiable.\nIf the function is only locally Lipschitz, the solution is guaranteed on some finite interval. If the function is (globally) Lipschitz, the solution is guaranteed on an unbounded interval.\n\n\nExtending the set of solutions (Carathéodory)\nIn contrast with the classical solution, we can allow the solution x(t) to fail to satisfy the ODE at some isolated points in time. This is called Carathéodory (or extended) solution.\nCarathéodory solution x(t) is more than just continuous (even more than uniformly continuous) but less than contiuously differentiable (aka \\mathcal C^1) – it is absolutely continuous. Absolutely continuous function is a solution of the integral equation (indeed, an equation) x(t) = x(t_0) + \\int_{t_0}^t f(x(\\tau),\\tau)\\mathrm{d}\\tau,\nwhere we use Lebesgue integral (instead of Riemann).\nHaving referred to absolute continuity and Lebesgue integral, the discussion could quickly become rather technical. But all we want to say is that f can be “some kind of discontinuous” with respect to t. In particular, it must be measurable wrt t, which again seems to start escalating… But it suffices to say that it includes the case when f(x,t) is piecewise continuous with respect to t (sampled data control with ZOH).\nNeedless to say, for a continuous f, solutions x are just classical (smooth).\nIf the function f is discontinuous with respect to x, some more concepts of a solution need to be invoked so that existence and uniqueness can be analyzed.\n\nExample 6 (Some more examples of nonexistence and nonuniqueness of solutions) The system with a discontinuous RHS \n\\begin{aligned}\n\\dot x_1 &= -2x_1 - 2x_2\\operatorname*{sgn(x_1)},\\\\\n\\dot x_2 &= x_2 + 4x_1\\operatorname*{sgn(x_1)}\n\\end{aligned}\n can be reformulated as a switched system \n\\begin{aligned}\n\\dot{\\bm x} &= \\begin{bmatrix}-2 & 2\\\\-4 & 1\\end{bmatrix}\\begin{bmatrix}x_1\\\\ x_2\\end{bmatrix}, \\quad s(\\bm x)\\leq 0\\\\\n\\dot{\\bm x} &= \\begin{bmatrix}-2 & -2\\\\4 & 1\\end{bmatrix}\\begin{bmatrix}x_1\\\\ x_2\\end{bmatrix}, \\quad s(\\bm x)> 0,\n\\end{aligned}\n where the switching function is s(\\bm x) = x_1.\n\n\nShow the code\ns(x) = x[1]\n\nf₁(x) = [-2x[1] + 2x[2], x[2] - 4x[1]]\nf₂(x) = [-2x[1] - 2x[2], x[2] + 4x[1]]\n\nf(x) = s(x) <= 0.0 ? f₁(x) : f₂(x) \n\nusing CairoMakie\nfig = Figure(size = (600, 600),fontsize=20)\nax = Axis(fig[1, 1], xlabel = \"x₁\", ylabel = \"x₂\")\nstreamplot!(ax,x->Point2f(f(x)), -1.5..1.5, -1.5..1.5, colormap = :magma)\nvlines!(ax,0; ymin = -1.1, ymax = 1.1, color = :red)\nfig\n\n\n\n\n\n\n\n\n\n\n\n\nSliding mode dynamics (on simple boundaries)\nThe previous example provided yet another illustration of a phenomenon of sliding, or a sliding mode. We say that there is an attractive sliding mode at \\bm x_\\mathrm{s}, if there is a trajectory that ends at \\bm x_\\mathrm{s}, but no trajectory that starts at \\bm x_\\mathrm{s}.\n\n\nGeneralized solutions (Filippov)\nIt is now high time to introduce yet another concept of a solution. A concept that will make it possible to model the sliding mode dynamics in a more rigorous way. Remember that when the state \\bm x(t) slides along the boundary, it qualifies as a solution to neither of the two state equations in any sense we have discussed so far. But now comes the concept of Fillipov solution.\n\\bm x() is a Filippov solution on [t_0,t_1] if for almost all t \n\\dot{\\bm{x}}(t) \\in \\overline{\\operatorname*{co}}\\{\\mathbf f(\\bm x(t),t)\\},\n where \\overline{\\operatorname*{co}} denotes the (closed) convex hull.\n\nExample 7 Consider the model in the previous example. The switching surface, along which the solution slides, is given by \\mathcal{S}^+ = \\{\\bm x \\mid x_1=0 \\land x_2\\geq 0\\}.\nNow, Filippov solution must satisfy the following differential inclusion \n\\begin{aligned}\n\\dot{\\bm x}(t) &\\in \\overline{\\operatorname*{co}}\\{\\bm A_1\\bm x_1(t), \\bm A_2\\bm x_2(t)\\}\\\\\n&= \\alpha_1(t) \\bm A_1\\bm x_1(t) + \\alpha_2(t) \\bm A_2\\bm x_2(t),\n\\end{aligned}\n where \\alpha_1(t), \\alpha_2(t) \\geq 0, \\alpha_1(t) + \\alpha_2(t) = 1.\nNote, however, that not all the weights keep the solution on \\mathcal S^+. We must impose some restriction, namely that \\dot x_1 = 0 for \\bm x(t) \\in \\mathcal S^+. This leads to \n\\alpha_1(t) [-2x_1 + 2x_2] + \\alpha_2(t) [-2x_1 - 2x_2] = 0\n\nCombining this with \\alpha_1(t) + \\alpha_2(t) = 1 gives \n\\alpha_1(t) = \\alpha_2(t) = 1/2,\n which in this simple case perhaps agrees with our intuition (the average of the two vector fields).\nThe dynamics on the sliding mode is modelled by \n\\dot x_1 = 0, \\quad \\dot x_2 = x_2, \\quad \\bm x \\in \\mathcal{S}^+.\n\n\n\n\n\n\n\n\nPossible nonuniqueness on intersection of boundaries\n\n\n\n…", "crumbs": [ "6. Some classes of hybrid systems", "Switched systems" @@ -1677,7 +1677,7 @@ "href": "stability_via_common_lyapunov_function.html#what-if-quadratic-lf-is-not-enough", "title": "Stability via common Lyapunov function", "section": "What if quadratic LF is not enough?", - "text": "What if quadratic LF is not enough?\nSo far we considered quadratic Lyapunov functions – and tt may be useful to display their prescription explicitly in the scalar form \n\\begin{aligned}\nV(\\bm x) &= \\bm x^\\top \\mathbf P \\bm x\\\\\n&= \\begin{bmatrix}x_1 & x_2\\end{bmatrix} \\begin{bmatrix} p_{11} & p_{12}\\\\ p_{12} & p_{22}\\end{bmatrix} \\begin{bmatrix}x_1\\\\ x_2\\end{bmatrix}\\\\\n&= p_{11}x_1^2 + 2p_{12}x_1x_2 + p_{22}x_2\n\\end{aligned}\n to show that, indeed, a quadratic Lyapunov function is a (multivariate) quadratic polynomial.\nNow, if quadratic polynomials are not enough, it is natural to consider polynomials of a higher degree. The crucial question is, however: how do we enforce positive definiteness?", + "text": "What if quadratic LF is not enough?\nSo far we considered quadratic Lyapunov functions – and it may be useful to display their prescription explicitly in the scalar form \n\\begin{aligned}\nV(\\bm x) &= \\bm x^\\top \\mathbf P \\bm x\\\\\n&= \\begin{bmatrix}x_1 & x_2\\end{bmatrix} \\begin{bmatrix} p_{11} & p_{12}\\\\ p_{12} & p_{22}\\end{bmatrix} \\begin{bmatrix}x_1\\\\ x_2\\end{bmatrix}\\\\\n&= p_{11}x_1^2 + 2p_{12}x_1x_2 + p_{22}x_2\n\\end{aligned}\n to show that, indeed, a quadratic Lyapunov function is a (multivariate) quadratic polynomial.\nNow, if quadratic polynomials are not enough, it is natural to consider polynomials of a higher degree. The crucial question is, however: how do we enforce positive definiteness?", "crumbs": [ "8. Stability", "Stability via common Lyapunov function" @@ -1853,7 +1853,7 @@ "href": "hybrid_equations.html#impossibility-to-stabilize-without-a-hybrid-controller", "title": "Hybrid equations", "section": "Impossibility to stabilize without a hybrid controller", - "text": "Impossibility to stabilize without a hybrid controller\n\nExample 6 (Unicycle stabilization) We consider a unicycle model of a vehicle in a plane, characterized by the position and orientation, with the controlled forward speed v and the yaw (turning) angular rate \\omega.\n\n\n\n\n\n\nFigure 4: Unicycle vehicle\n\n\n\nThe vehicle is modelled by \n\\begin{aligned}\n\\dot x &= v \\cos \\theta,\\\\\n\\dot y &= v \\sin \\theta,\\\\\n\\dot \\theta &= \\omega,\n\\end{aligned}\n\n\n\\bm x = \\begin{bmatrix}\nx\\\\ y\\\\ \\theta\n\\end{bmatrix},\n\\quad\n\\bm u = \\begin{bmatrix}\nv\\\\ \\omega\n\\end{bmatrix}.\n\nIt is known that this system cannot be stabilized by a continuous feedback controller. The general result that applies here was published in [1]. The condition of stabilizability by a time-invariant continuous state feedback is that the image of every neighborhood of the origin under (\\bm x,\\bm u) \\mapsto \\bm f(\\bm x, \\bm u) contains some neighborhood of the origin. This is not the case here. The map from the state-control space to the velocity space is\n\n\\begin{bmatrix}\nx\\\\ y\\\\ \\theta\\\\ v\\\\ \\omega\n\\end{bmatrix}\n\\mapsto\n\\begin{bmatrix}\nv \\cos \\theta\\\\\nv \\sin \\theta \\\\\n\\omega\n\\end{bmatrix}.\n\nNow consider a neighborhood of the origin such that |\\theta|<\\frac{\\pi}{2}. It is impossible to get \\bm f(\\bm x, \\bm u) = \\begin{bmatrix}\n0\\\\ f_2 \\\\ 0\\end{bmatrix}, \\; f_2\\neq 0. Hence, stabilization by a continuous feedback \\bm u = \\kappa (\\bm x) is impossible.\nBut it is possible to stabilize the vehicle using a discontinuous feedback. And discontinuous feedback controllr can be viewed as switching control, which in turn can be seen as instance of a hybrid controller.\n\n\nExample 7 (Global asymptotic stabilization on a circle) We now give a demonstration of a general phenomenon of stabilization on a manifold. We will see that even if asymptotic stabilization by a continuous feedback is possible, it may not be possible to guarantee it globally.\n\n\n\n\n\n\nWhy control on manifolds?\n\n\n\nFirst, recall that a manifold is a solution set for a system of nonlinear equations. A prominent example is a unit circle \\mathbb S_1 = \\{\\bm x \\in \\mathbb R^2 \\mid x_1^2 + x_2^2 - 1 = 0\\}. An extension to two variables is then \\mathbb S_2 = \\{\\bm x \\in \\mathbb R^4 \\mid x_1^2 + x_2^2 - 1 = 0, \\, x_3^2 + x_4^2 - 1 = 0\\}. Now, why shall we bother to study control within this type of a state space? It turns out that such models of state space are most appropriate in mechatronic/robotic systems wherein angular variables range more than 360^\\circ. We worked on this kind of a system some time ago when designing a control system for inertially stabilized gimballed camera platforms.\n\n\n\nIn this example we restrict the motion of of a particle to sliding around a unit circle \\mathbb S_1 is modelled by\n\n\\dot{\\bm x} = u\\begin{bmatrix}0 & -1\\\\ 1 & 0\\end{bmatrix}\\bm x,\n where \\bm x \\in \\mathbb S^1,\\quad u\\in \\mathbb R.\nThe point to be stabilized is \\bm x^* = \\begin{bmatrix}1\\\\ 0\\end{bmatrix}.\n\n\n\n\n\n\nFigure 5: Asymptotic stabilization on a circle\n\n\n\nWhat is required from a globally asymptotically stabilizing controller?\n\nSolutions stay in \\mathbb S^1,\nSolutions converge to \\bm x^*,\nIf a solution starts near \\bm x^*, it stays near.\n\nOne candidate is \\kappa(\\bm x) = -x_2.\nDefine the (Lyapunov) function V(\\bm x) = 1-x_1.\nIndeed, it does qualify as a Lyapunov function because it is zero at \\bm x^* and positive elsewhere. Furthermore, its time derivative along the solution trajectory is \n\\begin{aligned}\n\\dot V &= \\left(\\nabla_{\\bm{x}}V\\right)^\\top \\dot{\\bm x}\\\\\n&= \\begin{bmatrix}-1 & 0\\end{bmatrix}\\left(-x_2\\begin{bmatrix}0 & -1\\\\ 1 & 0\\end{bmatrix}\\begin{bmatrix} x_1 \\\\ x_2 \\end{bmatrix}\\right)\\\\\n&= -x_2^2\\\\\n&= -(1-x_1^2),\n\\end{aligned}\n from which it follows that \n\\dot V < 0 \\quad \\forall \\bm x \\in \\mathbb S^1 \\setminus \\{-1,1\\}.\n\nWith u=-x_2 the point \\bm x^* is stable but not globally atractive, hence it is not globally asymptotically stable.\nCan we do better?\nYes, we can. But we need to incorporate some switching into the controller. Loosely speaking anywhere except for the state (-1,0), we can apply the previously designed controller, and at the troublesome state (-1,0), or actually in some region around it, we need to switch to another controller that would drive the system away from the problematic region.\nBut we will take this example as an opportunity to go one step further and instead of just a switching controller we design a hybrid controller. The difference is that within a hybrid controller we can incorporate some hysteresis, which is a robustifying feature. In order to do that, we need to introduce a new state variable q\\in\\{0,1\\}. Determination of the flow and jump sets is sketched in Fig. 6.\n\n\n\n\n\n\nFigure 6: Definition of the sets defining a hybrid controller\n\n\n\nNote that there is no hysteresis if c_0=c_1, in which case the hybrid controller reduces to a switching controller (but more on switching controllers in the next chapter).\nThe two feedback controllers are given by \n\\begin{aligned}\n\\kappa(\\bm x,0) &= \\kappa_0(\\bm x) = -x_2,\\\\\n\\kappa(\\bm x,1) &= \\kappa_1(\\bm x) = -x_1.\n\\end{aligned}\n\nThe flow map is (DIY) \nf(\\bm x, q) = \\ldots\n\nThe flow set is \n\\mathcal{C} = (\\mathcal C_0 \\times \\{0\\}) \\cup (\\mathcal C_1 \\times \\{1\\}).\n\nThe jump set is \n\\mathcal{D} = (\\mathcal D_0 \\times \\{0\\}) \\cup (\\mathcal D_1 \\times \\{1\\}).\n\nThe jump map is \ng(\\bm x, q) = 1-q \\quad \\forall [\\bm x, q]^\\top \\in \\mathcal D.\n\nSimulation using Julia is provided below.\n\n\nShow the code\nusing OrdinaryDiffEq\n\n# Defining the sets and functions for the hybrid equations\n\nc₀, c₁ = -2/3, -1/3\n\nC(x,q) = (x[1] >= c₀ && q == 0) || (x[1] <= c₁ && q == 1) # Actually not really needed, just a complement of D.\nD(x,q) = (x[1] < c₀ && q == 0) || (x[1] > c₁ && q == 1) \n\ng(x,q) = 1-q\n\nκ(x,q) = q==0 ? -x[2] : -x[1] \n\nfunction f!(dx,x,q,t) # Already in the format for the ODE solver.\n A = [0.0 -1.0; 1.0 0.0] \n dx .= A*x*κ(x,q)\nend\n\n# Defining the initial conditions for the simulation\n\ncᵢ = (c₀+c₁)/2\nx₀ = [cᵢ,sqrt(1-cᵢ^2)]\nq₀ = 1\n\n# Setting up the simulation problem\n\ntspan = (0.0,10.0)\nprob = ODEProblem(f!,x₀,tspan,q₀)\n\nfunction condition(x,t,integrator)\n q = integrator.p \n return D(x,q)\nend\n\nfunction affect!(integrator)\n q = integrator.p\n x = integrator.u \n integrator.p = g(x,q)\nend\n\ncb = DiscreteCallback(condition,affect!)\n\n# Solving the simulation problem\n\nsol = solve(prob,Tsit5(),callback=cb,dtmax=0.1) # ContinuousCallback more suitable here\n\n# Plotting the results of the simulation\n\nusing Plots\ngr(tickfontsize=12,legend_font_pointsize=12,guidefontsize=12)\n\nplot(sol,label=[\"x₁\" \"x₂\"],xaxis=\"t\",yaxis=\"x\",lw=2)\nhline!([c₀], label=\"c₀\")\nhline!([c₁], label=\"c₁\")\n\n\n\n\n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nFigure 7: Simulation of stabilization on a circle using a hybrid controller\n\n\n\n\nThe solution can also be visualized in the state space.\n\n\nShow the code\nplot(sol,idxs=(1,2),label=\"\",xaxis=\"x₁\",yaxis=\"x₂\",lw=2,aspect_ratio=1)\nvline!([c₀], label=\"c₀\")\nvline!([c₁], label=\"c₁\")\nscatter!([x₀[1]],[x₀[2]],label=\"x init\")\nscatter!([1],[0],label=\"x ref\")\n\n\n\n\n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nFigure 8: Simulation of stabilization on a circle using a hybrid controller", + "text": "Impossibility to stabilize without a hybrid controller\n\nExample 6 (Unicycle stabilization) We consider a unicycle model of a vehicle in a plane, characterized by the position and orientation, with the controlled forward speed v and the yaw (turning) angular rate \\omega.\n\n\n\n\n\n\nFigure 4: Unicycle vehicle\n\n\n\nThe vehicle is modelled by \n\\begin{aligned}\n\\dot x &= v \\cos \\theta,\\\\\n\\dot y &= v \\sin \\theta,\\\\\n\\dot \\theta &= \\omega,\n\\end{aligned}\n\n\n\\bm x = \\begin{bmatrix}\nx\\\\ y\\\\ \\theta\n\\end{bmatrix},\n\\quad\n\\bm u = \\begin{bmatrix}\nv\\\\ \\omega\n\\end{bmatrix}.\n\nIt is known that this system cannot be stabilized by a continuous feedback controller. The general result that applies here was published in [1]. The condition of stabilizability by a time-invariant continuous state feedback is that the image of every neighborhood of the origin under (\\bm x,\\bm u) \\mapsto \\bm f(\\bm x, \\bm u) contains some neighborhood of the origin. This is not the case here. The map from the state-control space to the velocity space is\n\n\\begin{bmatrix}\nx\\\\ y\\\\ \\theta\\\\ v\\\\ \\omega\n\\end{bmatrix}\n\\mapsto\n\\begin{bmatrix}\nv \\cos \\theta\\\\\nv \\sin \\theta \\\\\n\\omega\n\\end{bmatrix}.\n\nNow consider a neighborhood of the origin such that |\\theta|<\\frac{\\pi}{2}. It is impossible to get \\bm f(\\bm x, \\bm u) = \\begin{bmatrix}\n0\\\\ f_2 \\\\ 0\\end{bmatrix}, \\; f_2\\neq 0. Hence, stabilization by a continuous feedback \\bm u = \\kappa (\\bm x) is impossible.\nBut it is possible to stabilize the vehicle using a discontinuous feedback. And discontinuous feedback controller can be viewed as switching control, which in turn can be seen as instance of a hybrid controller.\n\n\nExample 7 (Global asymptotic stabilization on a circle) We now give a demonstration of a general phenomenon of stabilization on a manifold. We will see that even if asymptotic stabilization by a continuous feedback is possible, it may not be possible to guarantee it globally.\n\n\n\n\n\n\nWhy control on manifolds?\n\n\n\nFirst, recall that a manifold is a solution set for a system of nonlinear equations. A prominent example is a unit circle \\mathbb S_1 = \\{\\bm x \\in \\mathbb R^2 \\mid x_1^2 + x_2^2 - 1 = 0\\}. An extension to two variables is then \\mathbb S_2 = \\{\\bm x \\in \\mathbb R^4 \\mid x_1^2 + x_2^2 - 1 = 0, \\, x_3^2 + x_4^2 - 1 = 0\\}. Now, why shall we bother to study control within this type of a state space? It turns out that such models of state space are most appropriate in mechatronic/robotic systems wherein angular variables range more than 360^\\circ. We worked on this kind of a system some time ago when designing a control system for inertially stabilized gimballed camera platforms.\n\n\n\nIn this example we restrict the motion of of a particle to sliding around a unit circle \\mathbb S_1 is modelled by\n\n\\dot{\\bm x} = u\\begin{bmatrix}0 & -1\\\\ 1 & 0\\end{bmatrix}\\bm x,\n where \\bm x \\in \\mathbb S^1,\\quad u\\in \\mathbb R.\nThe point to be stabilized is \\bm x^* = \\begin{bmatrix}1\\\\ 0\\end{bmatrix}.\n\n\n\n\n\n\nFigure 5: Asymptotic stabilization on a circle\n\n\n\nWhat is required from a globally asymptotically stabilizing controller?\n\nSolutions stay in \\mathbb S^1,\nSolutions converge to \\bm x^*,\nIf a solution starts near \\bm x^*, it stays near.\n\nOne candidate is \\kappa(\\bm x) = -x_2.\nDefine the (Lyapunov) function V(\\bm x) = 1-x_1.\nIndeed, it does qualify as a Lyapunov function because it is zero at \\bm x^* and positive elsewhere. Furthermore, its time derivative along the solution trajectory is \n\\begin{aligned}\n\\dot V &= \\left(\\nabla_{\\bm{x}}V\\right)^\\top \\dot{\\bm x}\\\\\n&= \\begin{bmatrix}-1 & 0\\end{bmatrix}\\left(-x_2\\begin{bmatrix}0 & -1\\\\ 1 & 0\\end{bmatrix}\\begin{bmatrix} x_1 \\\\ x_2 \\end{bmatrix}\\right)\\\\\n&= -x_2^2\\\\\n&= -(1-x_1^2),\n\\end{aligned}\n from which it follows that \n\\dot V < 0 \\quad \\forall \\bm x \\in \\mathbb S^1 \\setminus \\{-1,1\\}.\n\nWith u=-x_2 the point \\bm x^* is stable but not globally atractive, hence it is not globally asymptotically stable.\nCan we do better?\nYes, we can. But we need to incorporate some switching into the controller. Loosely speaking anywhere except for the state (-1,0), we can apply the previously designed controller, and at the troublesome state (-1,0), or actually in some region around it, we need to switch to another controller that would drive the system away from the problematic region.\nBut we will take this example as an opportunity to go one step further and instead of just a switching controller we design a hybrid controller. The difference is that within a hybrid controller we can incorporate some hysteresis, which is a robustifying feature. In order to do that, we need to introduce a new state variable q\\in\\{0,1\\}. Determination of the flow and jump sets is sketched in Fig. 6.\n\n\n\n\n\n\nFigure 6: Definition of the sets defining a hybrid controller\n\n\n\nNote that there is no hysteresis if c_0=c_1, in which case the hybrid controller reduces to a switching controller (but more on switching controllers in the next chapter).\nThe two feedback controllers are given by \n\\begin{aligned}\n\\kappa(\\bm x,0) &= \\kappa_0(\\bm x) = -x_2,\\\\\n\\kappa(\\bm x,1) &= \\kappa_1(\\bm x) = -x_1.\n\\end{aligned}\n\nThe flow map is (DIY) \nf(\\bm x, q) = \\ldots\n\nThe flow set is \n\\mathcal{C} = (\\mathcal C_0 \\times \\{0\\}) \\cup (\\mathcal C_1 \\times \\{1\\}).\n\nThe jump set is \n\\mathcal{D} = (\\mathcal D_0 \\times \\{0\\}) \\cup (\\mathcal D_1 \\times \\{1\\}).\n\nThe jump map is \ng(\\bm x, q) = 1-q \\quad \\forall [\\bm x, q]^\\top \\in \\mathcal D.\n\nSimulation using Julia is provided below.\n\n\nShow the code\nusing OrdinaryDiffEq\n\n# Defining the sets and functions for the hybrid equations\n\nc₀, c₁ = -2/3, -1/3\n\nC(x,q) = (x[1] >= c₀ && q == 0) || (x[1] <= c₁ && q == 1) # Actually not really needed, just a complement of D.\nD(x,q) = (x[1] < c₀ && q == 0) || (x[1] > c₁ && q == 1) \n\ng(x,q) = 1-q\n\nκ(x,q) = q==0 ? -x[2] : -x[1] \n\nfunction f!(dx,x,q,t) # Already in the format for the ODE solver.\n A = [0.0 -1.0; 1.0 0.0] \n dx .= A*x*κ(x,q)\nend\n\n# Defining the initial conditions for the simulation\n\ncᵢ = (c₀+c₁)/2\nx₀ = [cᵢ,sqrt(1-cᵢ^2)]\nq₀ = 1\n\n# Setting up the simulation problem\n\ntspan = (0.0,10.0)\nprob = ODEProblem(f!,x₀,tspan,q₀)\n\nfunction condition(x,t,integrator)\n q = integrator.p \n return D(x,q)\nend\n\nfunction affect!(integrator)\n q = integrator.p\n x = integrator.u \n integrator.p = g(x,q)\nend\n\ncb = DiscreteCallback(condition,affect!)\n\n# Solving the simulation problem\n\nsol = solve(prob,Tsit5(),callback=cb,dtmax=0.1) # ContinuousCallback more suitable here\n\n# Plotting the results of the simulation\n\nusing Plots\ngr(tickfontsize=12,legend_font_pointsize=12,guidefontsize=12)\n\nplot(sol,label=[\"x₁\" \"x₂\"],xaxis=\"t\",yaxis=\"x\",lw=2)\nhline!([c₀], label=\"c₀\")\nhline!([c₁], label=\"c₁\")\n\n\n\n\n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nFigure 7: Simulation of stabilization on a circle using a hybrid controller\n\n\n\n\nThe solution can also be visualized in the state space.\n\n\nShow the code\nplot(sol,idxs=(1,2),label=\"\",xaxis=\"x₁\",yaxis=\"x₂\",lw=2,aspect_ratio=1)\nvline!([c₀], label=\"c₀\")\nvline!([c₁], label=\"c₁\")\nscatter!([x₀[1]],[x₀[2]],label=\"x init\")\nscatter!([1],[0],label=\"x ref\")\n\n\n\n\n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nFigure 8: Simulation of stabilization on a circle using a hybrid controller", "crumbs": [ "5. Hybrid systems: Hybrid equations", "Hybrid equations" @@ -2509,7 +2509,7 @@ "href": "des_automata.html#extensions", "title": "State automata", "section": "Extensions", - "text": "Extensions\nThe concept of an automaton can be extended in several ways. In particular, the following two extensions introduce the concept of an output to an automaton.\n\nMoore machine\nOne extension of an automaton with outputs is Moore machine. The outputs assigned to the states by the output function y = g(x).\nThe output is produced (emitted) when the (new) state is entered.\nNote, in particular, that the output does not depend on the input. This has a major advantage when a feedback loop is closed around this system, since no algebraic loop is created.\nGraphically, we make a conventions that outputs are the labels of the states.\n\nExample 8 (Moore machine) The following automaton has just three states, but just two outputs (FLOW and NO FLOW).\n\n\n\n\n\n\n\n\nG\n\n\ninit\ninit\n\n\n\nclosed\n\nNO FLOW\nValve\nclosed\n\n\n\ninit->closed\n\n\n\n\n\npartial\n\nFLOW\nValve\npartially\nopen\n\n\n\nclosed->partial\n\n\nopen valve one turn\n\n\n\npartial->closed\n\n\nclose valve one turn\n\n\n\nfull\n\nFLOW\nValve\nfully open\n\n\n\npartial->full\n\n\nopen valve one turn\n\n\n\nfull->closed\n\n\nemergency shut off\n\n\n\nfull->partial\n\n\nclose valve one turn\n\n\n\n\n\n\nFigure 9: Example of a digraph representation of the Moore machine for a valve control\n\n\n\n\n\n\n\n\nMealy machine\nMealy machine is another extension of an automaton. Here the outputs are associated with the transitions rather than the states.\nSince the events already associated with the states can be viewed as the inputs, we now have input/output transition labels. The transition label e_\\mathrm{i}/e_\\mathrm{o} on the transion from x_1 to x_2 reads as “the input event e_\\mathrm{i} at state x_1 activates the transition to x_2, which outputs the event e_\\mathrm{o}” and can be written as x_1\\xrightarrow{e_\\mathrm{i}/e_\\mathrm{o}} x_2.\nIt can be viewed as if the output function also considers the input and not only the state y = e_\\mathrm{o} = g(x,e_\\mathrm{i}).\nIn contrast with the Moore machine, here the output is produced (emitted) during the transition (before the new state is entered).\n\nExample 9 (Mealy machine) Coffee machine: coffee for 30 CZK, machine accepting 10 and 20 CZK coins, no change.\n\n\n\n\n\n\n\n\nG\n\n\ninit\ninit\n\n\n\n0\n\nNo coin\n\n\n\ninit->0\n\n\n\n\n\n10\n\n10 CZK\n\n\n\n0->10\n\n\ninsert 10 CZK / no coffee\n\n\n\n20\n\n20 CZK\n\n\n\n0->20\n\n\ninsert 20 CZK / no coffee\n\n\n\n10->0\n\n\ninsert 20 CZK / coffee\n\n\n\n10->20\n\n\ninsert 10 CZK / no coffee\n\n\n\n20->0\n\n\ninsert 10 CZK / coffee\n\n\n\n20->10\n\n\ninsert 20 CZK / coffee\n\n\n\n\n\n\nFigure 10: Example of a digraph representation of the Mealy machine for a coffee machine\n\n\n\n\n\n\n\nExample 10 (Reformulate the previous example as a Moore machine) Two more states wrt Mealy\n\n\n\n\n\n\n\n\nG\n\n\ninit\ninit\n\n\n\n0\n\nNO COFFEE\nNo\ncoin\n\n\n\ninit->0\n\n\n\n\n\n10\n\nNO COFFEE\n10\nCZK\n\n\n\n0->10\n\n\ninsert 10 CZK\n\n\n\n20\n\nNO COFFEE\n20\nCZK\n\n\n\n0->20\n\n\ninsert 20 CZK\n\n\n\n10->20\n\n\ninsert 10 CZK\n\n\n\n30\n\nCOFFEE\n10+20\nCZK\n\n\n\n10->30\n\n\ninsert 20 CZK\n\n\n\n20->30\n\n\ninsert 10 CZK\n\n\n\n40\n\nCOFFEE\n20+20\nCZK\n\n\n\n20->40\n\n\ninsert 20 CZK\n\n\n\n30->0\n\n\n\n\n\n30->10\n\n\ninsert 10 CZK\n\n\n\n30->20\n\n\ninsert 20 CZK\n\n\n\n40->10\n\n\n\n\n\n40->20\n\n\ninsert 10 CZK\n\n\n\n40->30\n\n\ninsert 20 CZK\n\n\n\n\n\n\nFigure 11: Example of a digraph representation of the Moore machine for a coffee machine\n\n\n\n\n\n\n\n\n\n\n\n\nNote\n\n\n\nThere are transitions from 30 and 40 back to 0 that are not labelled by any event. This does not seem to follow the general rule that transitions are always triggered by events. Not what? It can be resolved upon introducing time as the timeout transitions.\n\n\n\nExample 11 (Dijkstra’s token passing) The motivation for this example is to show that it is perhaps not always productive to insist on visual description of the automaton using a graph. The four components of our formal definition of an automaton are just enough, and they translate directly to a code.\nThe example comes from the field of distributed computing systems. It considers several computers that are connected in ring topology, and the communication is just one-directional as Fig. 12 shows. The task is to use the communication to determine in – a distributed way – which of the computers carries a (single) token at a given time. And to realize passing of the token to a neighbour. We assume a synchronous case, in which all the computers are sending simultaneously, say, with some fixed sending period.\n\n\n\n\n\n\n\n\nG\n\n\n0\n\n0\n\n\n\n1\n\n1\n\n\n\n0->1\n\n\n\n\n\n2\n\n2\n\n\n\n1->2\n\n\n\n\n\n3\n\n3\n\n\n\n2->3\n\n\n\n\n\n3->0\n\n\n\n\n\n\n\n\nFigure 12: Example of a ring topology for Dijkstra’s token passing in a distributed system\n\n\n\n\n\nOne popular method for this is called Dijkstra’s token passing. Each computer keeps a single integer value as its state variable. And it forwards this integer value to the neighbour (in the clockwise direction in our setting). Upon receiving the value from the other neighbour (in the counter-clockwise direction), it updates its own value according to the rule displayed in the code below. At every clock tick, the state vector (composed of the individual state variables) is updated according to the function update!() in the code. Based on the value of the state vector, an output is computed, which decodes the informovation about the location of the token from the state vector. Again, the details are in the output() function.\n\n\nShow the code\nstruct DijkstraTokenRing\n number_of_nodes::Int64\n max_value_of_state_variable::Int64\n state_vector::Vector{Int64}\nend\n\nfunction update!(dtr::DijkstraTokenRing) \n n = dtr.number_of_nodes\n k = dtr.max_value_of_state_variable\n x = dtr.state_vector\n xnext = copy(x)\n for i in eachindex(x) # Mind the +1 shift. x[2] corresponds to x₁ in the literature.\n if i == 1 \n xnext[i] = (x[i] == x[n]) ? mod(x[i] + 1,k) : x[i] # Increment if the left neighbour is identical.\n else \n xnext[i] = (x[i] != x[i-1]) ? x[i-1] : x[i] # Update by the differing left neighbour.\n end\n end\n dtr.state_vector .= xnext \nend\n\nfunction output(dtr::DijkstraTokenRing) # Token = 1, no token = 0 at the given position. \n x = dtr.state_vector\n y = similar(x)\n y[1] = iszero(x[1]-x[end])\n y[2:end] .= .!iszero.(diff(x))\n return y\nend\n\n\noutput (generic function with 1 method)\n\n\nWe now rund the code for a given number of computers and some initial state vector that does not necessarily comply with the requirement that there is only one token in the ring.\n\n\nShow the code\nn = 4 # Concrete number of nodes.\nk = n # Concrete max value of a state variable (>= n).\n@show x_initial = rand(0:k,n) # Initial state vector, not necessarily acceptable (>1 token in the ring).\ndtr = DijkstraTokenRing(n,k,x_initial)\n@show output(dtr) # Show where the token is (are).\n\n@show update!(dtr), output(dtr) # Perform the update, show the state vector and show where the token is.\n@show update!(dtr), output(dtr) # Repeat a few times to see the stabilization. \n@show update!(dtr), output(dtr)\n@show update!(dtr), output(dtr)\n@show update!(dtr), output(dtr)\n\n\nx_initial = rand(0:k, n) = [0, 4, 0, 4]\noutput(dtr) = [0, 1, 1, 1]\n(update!(dtr), output(dtr)) = ([0, 0, 4, 0], [1, 0, 1, 1])\n(update!(dtr), output(dtr)) = ([1, 0, 0, 4], [0, 1, 0, 1])\n(update!(dtr), output(dtr)) = ([1, 1, 0, 0], [0, 0, 1, 0])\n(update!(dtr), output(dtr)) = ([1, 1, 1, 0], [0, 0, 0, 1])\n(update!(dtr), output(dtr)) = ([1, 1, 1, 1], [1, 0, 0, 0])\n\n\n([1, 1, 1, 1], [1, 0, 0, 0])\n\n\nWe can see that although initially the there can be more tokens, after a few iterations the algorithm achieves the goal of having just one token in the ring.\n\n\n\nExtended-state automaton\nYet another extension of an automaton is the extended-state automaton. And indeed, the hyphen is there on purpose as we extend the state space.\nIn particular, we augment the state variable(s) that define the states/modes/locations (the nodes in the graph) by additional (typed) state variables: Int, Enum, Bool, …\nTransitions from one mode to another are then guarded by conditions on theses new extra state variables.\nBesides being guarded by a guard condition, a given transition can also be labelled by a reset function that resets the extended-state variables.\n\nExample 12 (Counting up to 10) In this example, there are two modes (on and off), which can be captured by a single binary state variable, say x. But then there is an additional integer variable k, and the two variables together characterize the extended state.\n\n\n\n\n\n\n\n\nG\n\n\ninit\ninit\n\n\n\nOFF\n\nOFF\n\n\n\ninit->OFF\n\n\nint k=0\n\n\n\nON\n\nON\n\n\n\nOFF->ON\n\n\npress\n\n\n\nON->OFF\n\n\n(press ⋁ k ≥ 10); k=0\n\n\n\nON->ON\n\n\n(press ∧ k < 10); k=k+1\n\n\n\n\n\n\nFigure 13: Example of a digraph representation of the extended-state automaton for counting up to ten", + "text": "Extensions\nThe concept of an automaton can be extended in several ways. In particular, the following two extensions introduce the concept of an output to an automaton.\n\nMoore machine\nOne extension of an automaton with outputs is Moore machine. The outputs assigned to the states by the output function y = g(x).\nThe output is produced (emitted) when the (new) state is entered.\nNote, in particular, that the output does not depend on the input. This has a major advantage when a feedback loop is closed around this system, since no algebraic loop is created.\nGraphically, we make a conventions that outputs are the labels of the states.\n\nExample 8 (Moore machine) The following automaton has just three states, but just two outputs (FLOW and NO FLOW).\n\n\n\n\n\n\n\n\nG\n\n\ninit\ninit\n\n\n\nclosed\n\nNO FLOW\nValve\nclosed\n\n\n\ninit->closed\n\n\n\n\n\npartial\n\nFLOW\nValve\npartially\nopen\n\n\n\nclosed->partial\n\n\nopen valve one turn\n\n\n\npartial->closed\n\n\nclose valve one turn\n\n\n\nfull\n\nFLOW\nValve\nfully open\n\n\n\npartial->full\n\n\nopen valve one turn\n\n\n\nfull->closed\n\n\nemergency shut off\n\n\n\nfull->partial\n\n\nclose valve one turn\n\n\n\n\n\n\nFigure 9: Example of a digraph representation of the Moore machine for a valve control\n\n\n\n\n\n\n\n\nMealy machine\nMealy machine is another extension of an automaton. Here the outputs are associated with the transitions rather than the states.\nSince the events already associated with the states can be viewed as the inputs, we now have input/output transition labels. The transition label e_\\mathrm{i}/e_\\mathrm{o} on the transion from x_1 to x_2 reads as “the input event e_\\mathrm{i} at state x_1 activates the transition to x_2, which outputs the event e_\\mathrm{o}” and can be written as x_1\\xrightarrow{e_\\mathrm{i}/e_\\mathrm{o}} x_2.\nIt can be viewed as if the output function also considers the input and not only the state y = e_\\mathrm{o} = g(x,e_\\mathrm{i}).\nIn contrast with the Moore machine, here the output is produced (emitted) during the transition (before the new state is entered).\n\nExample 9 (Mealy machine) Coffee machine: coffee for 30 CZK, machine accepting 10 and 20 CZK coins, no change.\n\n\n\n\n\n\n\n\nG\n\n\ninit\ninit\n\n\n\n0\n\nNo coin\n\n\n\ninit->0\n\n\n\n\n\n10\n\n10 CZK\n\n\n\n0->10\n\n\ninsert 10 CZK / no coffee\n\n\n\n20\n\n20 CZK\n\n\n\n0->20\n\n\ninsert 20 CZK / no coffee\n\n\n\n10->0\n\n\ninsert 20 CZK / coffee\n\n\n\n10->20\n\n\ninsert 10 CZK / no coffee\n\n\n\n20->0\n\n\ninsert 10 CZK / coffee\n\n\n\n20->10\n\n\ninsert 20 CZK / coffee\n\n\n\n\n\n\nFigure 10: Example of a digraph representation of the Mealy machine for a coffee machine\n\n\n\n\n\n\n\nExample 10 (Reformulate the previous example as a Moore machine) Two more states wrt Mealy\n\n\n\n\n\n\n\n\nG\n\n\ninit\ninit\n\n\n\n0\n\nNO COFFEE\nNo\ncoin\n\n\n\ninit->0\n\n\n\n\n\n10\n\nNO COFFEE\n10\nCZK\n\n\n\n0->10\n\n\ninsert 10 CZK\n\n\n\n20\n\nNO COFFEE\n20\nCZK\n\n\n\n0->20\n\n\ninsert 20 CZK\n\n\n\n10->20\n\n\ninsert 10 CZK\n\n\n\n30\n\nCOFFEE\n10+20\nCZK\n\n\n\n10->30\n\n\ninsert 20 CZK\n\n\n\n20->30\n\n\ninsert 10 CZK\n\n\n\n40\n\nCOFFEE\n20+20\nCZK\n\n\n\n20->40\n\n\ninsert 20 CZK\n\n\n\n30->0\n\n\n\n\n\n30->10\n\n\ninsert 10 CZK\n\n\n\n30->20\n\n\ninsert 20 CZK\n\n\n\n40->10\n\n\n\n\n\n40->20\n\n\ninsert 10 CZK\n\n\n\n40->30\n\n\ninsert 20 CZK\n\n\n\n\n\n\nFigure 11: Example of a digraph representation of the Moore machine for a coffee machine\n\n\n\n\n\n\n\n\n\n\n\n\nNote\n\n\n\nThere are transitions from 30 and 40 back to 0 that are not labelled by any event. This does not seem to follow the general rule that transitions are always triggered by events. Not what? It can be resolved upon introducing time as the timeout transitions.\n\n\n\nExample 11 (Dijkstra’s token passing) The motivation for this example is to show that it is perhaps not always productive to insist on visual description of the automaton using a graph. The four components of our formal definition of an automaton are just enough, and they translate directly to a code.\nThe example comes from the field of distributed computing systems. It considers several computers that are connected in ring topology, and the communication is just one-directional as Fig. 12 shows. The task is to use the communication to determine in – a distributed way – which of the computers carries a (single) token at a given time. And to realize passing of the token to a neighbour. We assume a synchronous case, in which all the computers are sending simultaneously, say, with some fixed sending period.\n\n\n\n\n\n\n\n\nG\n\n\n0\n\n0\n\n\n\n1\n\n1\n\n\n\n0->1\n\n\n\n\n\n2\n\n2\n\n\n\n1->2\n\n\n\n\n\n3\n\n3\n\n\n\n2->3\n\n\n\n\n\n3->0\n\n\n\n\n\n\n\n\nFigure 12: Example of a ring topology for Dijkstra’s token passing in a distributed system\n\n\n\n\n\nOne popular method for this is called Dijkstra’s token passing. Each computer keeps a single integer value as its state variable. And it forwards this integer value to the neighbour (in the clockwise direction in our setting). Upon receiving the value from the other neighbour (in the counter-clockwise direction), it updates its own value according to the rule displayed in the code below. At every clock tick, the state vector (composed of the individual state variables) is updated according to the function update!() in the code. Based on the value of the state vector, an output is computed, which decodes the informovation about the location of the token from the state vector. Again, the details are in the output() function.\n\n\nShow the code\nstruct DijkstraTokenRing\n number_of_nodes::Int64\n max_value_of_state_variable::Int64\n state_vector::Vector{Int64}\nend\n\nfunction update!(dtr::DijkstraTokenRing) \n n = dtr.number_of_nodes\n k = dtr.max_value_of_state_variable\n x = dtr.state_vector\n xnext = copy(x)\n for i in eachindex(x) # Mind the +1 shift. x[2] corresponds to x₁ in the literature.\n if i == 1 \n xnext[i] = (x[i] == x[n]) ? mod(x[i] + 1,k) : x[i] # Increment if the left neighbour is identical.\n else \n xnext[i] = (x[i] != x[i-1]) ? x[i-1] : x[i] # Update by the differing left neighbour.\n end\n end\n dtr.state_vector .= xnext \nend\n\nfunction output(dtr::DijkstraTokenRing) # Token = 1, no token = 0 at the given position. \n x = dtr.state_vector\n y = similar(x)\n y[1] = iszero(x[1]-x[end])\n y[2:end] .= .!iszero.(diff(x))\n return y\nend\n\n\noutput (generic function with 1 method)\n\n\nWe now rund the code for a given number of computers and some initial state vector that does not necessarily comply with the requirement that there is only one token in the ring.\n\n\nShow the code\nn = 4 # Concrete number of nodes.\nk = n # Concrete max value of a state variable (>= n).\n@show x_initial = rand(0:k,n) # Initial state vector, not necessarily acceptable (>1 token in the ring).\ndtr = DijkstraTokenRing(n,k,x_initial)\n@show output(dtr) # Show where the token is (are).\n\n@show update!(dtr), output(dtr) # Perform the update, show the state vector and show where the token is.\n@show update!(dtr), output(dtr) # Repeat a few times to see the stabilization. \n@show update!(dtr), output(dtr)\n@show update!(dtr), output(dtr)\n@show update!(dtr), output(dtr)\n\n\nx_initial = rand(0:k, n) = [4, 2, 3, 3]\noutput(dtr) = [0, 1, 1, 0]\n(update!(dtr), output(dtr)) = ([4, 4, 2, 3], [0, 0, 1, 1])\n(update!(dtr), output(dtr)) = ([4, 4, 4, 2], [0, 0, 0, 1])\n(update!(dtr), output(dtr)) = ([4, 4, 4, 4], [1, 0, 0, 0])\n(update!(dtr), output(dtr)) = ([1, 4, 4, 4], [0, 1, 0, 0])\n(update!(dtr), output(dtr)) = ([1, 1, 4, 4], [0, 0, 1, 0])\n\n\n([1, 1, 4, 4], [0, 0, 1, 0])\n\n\nWe can see that although initially the there can be more tokens, after a few iterations the algorithm achieves the goal of having just one token in the ring.\n\n\n\nExtended-state automaton\nYet another extension of an automaton is the extended-state automaton. And indeed, the hyphen is there on purpose as we extend the state space.\nIn particular, we augment the state variable(s) that define the states/modes/locations (the nodes in the graph) by additional (typed) state variables: Int, Enum, Bool, …\nTransitions from one mode to another are then guarded by conditions on theses new extra state variables.\nBesides being guarded by a guard condition, a given transition can also be labelled by a reset function that resets the extended-state variables.\n\nExample 12 (Counting up to 10) In this example, there are two modes (on and off), which can be captured by a single binary state variable, say x. But then there is an additional integer variable k, and the two variables together characterize the extended state.\n\n\n\n\n\n\n\n\nG\n\n\ninit\ninit\n\n\n\nOFF\n\nOFF\n\n\n\ninit->OFF\n\n\nint k=0\n\n\n\nON\n\nON\n\n\n\nOFF->ON\n\n\npress\n\n\n\nON->OFF\n\n\n(press ⋁ k ≥ 10); k=0\n\n\n\nON->ON\n\n\n(press ∧ k < 10); k=k+1\n\n\n\n\n\n\nFigure 13: Example of a digraph representation of the extended-state automaton for counting up to ten", "crumbs": [ "1. Discrete-event systems: Automata", "State automata" @@ -2707,7 +2707,7 @@ "href": "stability_via_multiple_lyapunov_function.html#using-comparison-functions-and-nonstrict-inequalities", "title": "Stability via multiple Lyapunov functions", "section": "Using comparison functions and nonstrict inequalities", - "text": "Using comparison functions and nonstrict inequalities\nWe can use our good old comparison functions to formulate the conditions of positive definiteness and negative definiteness. \n\\alpha_1 \\bm x^\\top \\mathbf I \\bm x \\leq \\bm x^\\top \\mathbf P_i \\bm x \\leq \\alpha_2 \\bm x^\\top \\mathbf I \\bm x \\quad \\forall \\;\\bm x\\in \\Omega_i,\n\n\n\\bm x^\\top \\left( \\mathbf A_i^\\top \\mathbf P_i + \\mathbf P_i \\mathbf A_i \\right) \\bm x \\leq -\\alpha_3 \\bm x^\\top \\mathbf I \\bm x\\quad \\forall \\;\\bm x\\in \\Omega_i.\n\nThe difference now is that these conditions are only reuired to hold on some state regions, some subsets of the state space. It is now time to discuss how to characterize those regions.", + "text": "Using comparison functions and nonstrict inequalities\nWe can use our good old comparison functions to formulate the conditions of positive definiteness and negative definiteness. \n\\alpha_1 \\bm x^\\top \\mathbf I \\bm x \\leq \\bm x^\\top \\mathbf P_i \\bm x \\leq \\alpha_2 \\bm x^\\top \\mathbf I \\bm x \\quad \\forall \\;\\bm x\\in \\Omega_i,\n\n\n\\bm x^\\top \\left( \\mathbf A_i^\\top \\mathbf P_i + \\mathbf P_i \\mathbf A_i \\right) \\bm x \\leq -\\alpha_3 \\bm x^\\top \\mathbf I \\bm x\\quad \\forall \\;\\bm x\\in \\Omega_i.\n\nThe difference now is that these conditions are only required to hold on some state regions, some subsets of the state space. It is now time to discuss how to characterize those regions.", "crumbs": [ "8. Stability", "Stability via multiple Lyapunov functions" diff --git a/sitemap.xml b/sitemap.xml index be50dd9..8aa7b65 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -22,7 +22,7 @@ https://hurak.github.io/hys/stability_recap.html - 2025-01-21T19:23:17.008Z + 2025-01-27T16:25:56.654Z https://hurak.github.io/hys/petri_nets_timed.html @@ -46,7 +46,7 @@ https://hurak.github.io/hys/stability_concepts.html - 2024-11-12T17:32:24.731Z + 2025-01-27T16:31:29.770Z https://hurak.github.io/hys/max_plus_systems.html @@ -74,7 +74,7 @@ https://hurak.github.io/hys/classes_switched.html - 2025-01-23T12:07:55.774Z + 2025-01-27T16:25:14.831Z https://hurak.github.io/hys/hybrid_system_course_mindmap.html @@ -134,7 +134,7 @@ https://hurak.github.io/hys/stability_via_common_lyapunov_function.html - 2024-12-23T21:24:32.414Z + 2025-01-27T16:26:27.094Z https://hurak.github.io/hys/mld_logic_vs_inequalities.html @@ -142,7 +142,7 @@ https://hurak.github.io/hys/hybrid_equations.html - 2025-01-10T21:39:02.096Z + 2025-01-27T16:22:03.552Z https://hurak.github.io/hys/des_references.html @@ -214,7 +214,7 @@ https://hurak.github.io/hys/stability_via_multiple_lyapunov_function.html - 2025-01-11T11:59:09.118Z + 2025-01-27T16:29:55.442Z https://hurak.github.io/hys/complementarity_references.html @@ -230,6 +230,6 @@ https://hurak.github.io/hys/hybrid_automata.html - 2025-01-10T21:43:46.174Z + 2025-01-27T16:21:30.700Z diff --git a/stability_concepts.html b/stability_concepts.html index b1e188c..dd4c951 100644 --- a/stability_concepts.html +++ b/stability_concepts.html @@ -708,7 +708,7 @@

q is given by \dot{\bm x} = \mathbf f_q(\bm x). The invariants (or domains) of each mode are \mathcal X_q, \, q=1, \ldots, m.

-

The definition of the equilibrium \bm x_\mathrm{eq} that is ofter found in the literature imposes these two conditions:

+

The definition of the equilibrium \bm x_\mathrm{eq} that is often found in the literature imposes these two conditions:

  • \mathbf 0 = \mathbf f_q(\bm x_\mathrm{eq}) for all q\in \mathcal Q,
  • the reset map r(q,q',\bm x_\mathrm{eq}) = \bm x_\mathrm{eq}.
  • @@ -720,7 +720,7 @@

    Equilibrium of a hybrid system modelled by hybrid equations

    The state vector within this modelling framework is composed by both the discrete and continuous state variables. The two conditions for the equilibrium of a hybrid automata can be translated into the hybrid equation framework, which means that the equilibrium is not just a single point but rather a set of points.

    -

    Example 1 (Equilibrium of a hybrid system modelled by hybrid equations) Consider a hybrid system modelled by hybrid equations, for which the state space is given by \mathcal X = \{0,1\} \times \mathbb R. The dynamics of the system is given by

    +

    Example 1 (Equilibrium of a hybrid system modelled by hybrid equations) Consider a hybrid system modelled by hybrid equations, for which the state space is given by \mathcal X = \{0,1\} \times \mathbb R. The dynamics of the system is given by [TBD]

    This makes the analysis significantly more challenging. Therefore, in our lecture we will only consider stability of hybrid automata.

    diff --git a/stability_recap.html b/stability_recap.html index 324735e..5b387a2 100644 --- a/stability_recap.html +++ b/stability_recap.html @@ -716,7 +716,7 @@

    Recap of stability analysis for continuous dynamical systemsEquilibrium

    Loosely speaking, equilibrium is a state at which the system can rest indefinitely when undisturbed by external disturbances. More technically speaking, equilibrium is a point in the state space, that is, a vector \bm x_\mathrm{eq}\in \mathbb R^n, at which the vector field \mathbf f vanishes, that is,
    \mathbf f(\bm x_\mathrm{eq}) = \mathbf 0.

    -

    Without loss of generality we often assume that \bm x_\mathrm{eq} = \mathbf 0, because if the equilibrium is considered anywhere else than at the origin, we can alway introduce a new shifted state vector \bm x_\mathrm{new}(t) = \bm x(t) - \bm x_\mathrm{eq}.

    +

    Without loss of generality we often assume that \bm x_\mathrm{eq} = \mathbf 0, because if the equilibrium is considered anywhere else than at the origin, we can always introduce a new shifted state vector \bm x_\mathrm{new}(t) = \bm x(t) - \bm x_\mathrm{eq}.

    @@ -765,8 +765,8 @@

    Attractivity

    Asymptotic stability

    -

    Combination of Lyapunov stability and attractivity is called assymptotic stability.

    -

    If the attractivity is global, the assymptotic stability is called global too.

    +

    Combination of Lyapunov stability and attractivity is called asymptotic stability.

    +

    If the attractivity is global, the asymptotic stability is called global too.

    Exponential stability

    diff --git a/stability_via_common_lyapunov_function.html b/stability_via_common_lyapunov_function.html index 58c2103..193dfc4 100644 --- a/stability_via_common_lyapunov_function.html +++ b/stability_via_common_lyapunov_function.html @@ -857,7 +857,7 @@

    Solution

    What if quadratic LF is not enough?

    -

    So far we considered quadratic Lyapunov functions – and tt may be useful to display their prescription explicitly in the scalar form +

    So far we considered quadratic Lyapunov functions – and it may be useful to display their prescription explicitly in the scalar form \begin{aligned} V(\bm x) &= \bm x^\top \mathbf P \bm x\\ &= \begin{bmatrix}x_1 & x_2\end{bmatrix} \begin{bmatrix} p_{11} & p_{12}\\ p_{12} & p_{22}\end{bmatrix} \begin{bmatrix}x_1\\ x_2\end{bmatrix}\\ diff --git a/stability_via_multiple_lyapunov_function.html b/stability_via_multiple_lyapunov_function.html index 29d55f8..842206e 100644 --- a/stability_via_multiple_lyapunov_function.html +++ b/stability_via_multiple_lyapunov_function.html @@ -796,7 +796,7 @@

    Stability via multiple Lyapunov functions

    │ └─ Convex.NegateAtom (affine; real) │ └─ … ├─ PSD constraint (convex) - │ └─ 2×2 real variable (id: 232…843) + │ └─ 2×2 real variable (id: 726…247) ⋮
    @@ -973,7 +973,7 @@

    \bm x^\top \left( \mathbf A_i^\top \mathbf P_i + \mathbf P_i \mathbf A_i \right) \bm x \leq -\alpha_3 \bm x^\top \mathbf I \bm x\quad \forall \;\bm x\in \Omega_i.

    -

    The difference now is that these conditions are only reuired to hold on some state regions, some subsets of the state space. It is now time to discuss how to characterize those regions.

    +

    The difference now is that these conditions are only required to hold on some state regions, some subsets of the state space. It is now time to discuss how to characterize those regions.

    Characterization of subsets of state space using LMI

    diff --git a/verification_barrier.html b/verification_barrier.html index 3e1bd7d..8380473 100644 --- a/verification_barrier.html +++ b/verification_barrier.html @@ -830,1403 +830,1403 @@

    - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Figure 1: The vector field, the initial and unsafe sets, and the boundary function level set for the barrier certificate example. Simulated are also a few trajectories. From Tutorials for SumOfSquares.jl.