% Internal Dynamics % ๐ค Sรฉbastien Boisgรฉrault
-
๐ Documents (GitHub)
-
ยฉ๏ธ License CC BY 4.0
๐ | Code | ๐ | Worked Example |
๐ | Graph | ๐งฉ | Exercise |
๐ท๏ธ | Definition | ๐ป | Numerical Method |
๐ | Theorem | ๐งฎ | Analytical Method |
๐ | Remark | ๐ง | Theory |
โน๏ธ | Information | ๐๏ธ | Hint |
Warning | ๐ | Solution |
from numpy import *
from numpy.linalg import *
from scipy.linalg import *
from matplotlib.pyplot import *
from mpl_toolkits.mplot3d import *
from scipy.integrate import solve_ivp
::: hidden :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# Python 3.x Standard Library
import gc
import os
# Third-Party Packages
import numpy as np; np.seterr(all="ignore")
import numpy.linalg as la
import scipy.misc
import matplotlib as mpl; mpl.use("Agg")
import matplotlib.pyplot as pp
import matplotlib.axes as ax
import matplotlib.patches as pa
#
# Matplotlib Configuration & Helper Functions
# --------------------------------------------------------------------------
# TODO: also reconsider line width and markersize stuff "for the web
# settings".
fontsize = 10
width = 345 / 72.27
height = width / (16/9)
rc = {
"text.usetex": True,
"pgf.preamble": r"\usepackage{amsmath,amsfonts,amssymb}",
#"font.family": "serif",
"font.serif": [],
#"font.sans-serif": [],
"legend.fontsize": fontsize,
"axes.titlesize": fontsize,
"axes.labelsize": fontsize,
"xtick.labelsize": fontsize,
"ytick.labelsize": fontsize,
"figure.max_open_warning": 100,
#"savefig.dpi": 300,
#"figure.dpi": 300,
"figure.figsize": [width, height],
"lines.linewidth": 1.0,
}
mpl.rcParams.update(rc)
# Web target: 160 / 9 inches (that's ~45 cm, this is huge) at 90 dpi
# (the "standard" dpi for Web computations) gives 1600 px.
width_in = 160 / 9
def save(name, **options):
cwd = os.getcwd()
root = os.path.dirname(os.path.realpath(__file__))
os.chdir(root)
pp.savefig(name + ".svg", **options)
os.chdir(cwd)
def set_ratio(ratio=1.0, bottom=0.1, top=0.1, left=0.1, right=0.1):
height_in = (1.0 - left - right)/(1.0 - bottom - top) * width_in / ratio
pp.gcf().set_size_inches((width_in, height_in))
pp.gcf().subplots_adjust(bottom=bottom, top=1.0-top, left=left, right=1.0-right)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
def Q(f, xs, ys):
X, Y = meshgrid(xs, ys)
v = vectorize
fx = v(lambda x, y: f([x, y])[0])
fy = v(lambda x, y: f([x, y])[1])
return X, Y, fx(X, Y), fy(X, Y)
We are interested in the behavior of the solution to
First, we study some elementary systems in this class.
๐ Solution: $$ x(t) = e^{a t} x_0 $$
๐ Proof: $$ \frac{d}{dt} e^{at} x_0 = a e^{at} x_0 = a x(t) $$ and $$ x(0) = e^{a \times 0} x_0 = x_0. $$
a = 2.0; x0 = 1.0
figure()
t = linspace(0.0, 3.0, 1000)
plot(t, exp(a*t)*x0, "k")
xlabel("$t$"); ylabel("$x(t)$"); title(f"$a={a}$")
grid(); axis([0.0, 2.0, 0.0, 10.0])
::: hidden :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
tight_layout()
save("images/scalar-LTI-2")
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::: slides :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
figure()
plot(real(a), imag(a), "x", color="k")
gca().set_aspect(1.0)
xlim(-3,3); ylim(-3,3);
plot([-3,3], [0,0], "k")
plot([0, 0], [-3, 3], "k")
xticks([-2,-1,0,1,2]); yticks([-2,-1,0,1,2])
title(f"$a={a}$"); grid(True)
::: hidden :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
tight_layout()
save("images/scalar-LTI-2-poles")
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::: slides :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
a = 1.0; x0 = 1.0
figure()
t = linspace(0.0, 3.0, 1000)
plot(t, exp(a*t)*x0, "k")
xlabel("$t$"); ylabel("$x(t)$"); title(f"$a={a}$")
grid(); axis([0.0, 2.0, 0.0, 10.0])
::: hidden :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
tight_layout()
save("images/scalar-LTI-1")
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::: slides :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
figure()
plot(real(a), imag(a), "x", color="k")
gca().set_aspect(1.0)
xlim(-3,3); ylim(-3,3);
plot([-3,3], [0,0], "k")
plot([0, 0], [-3, 3], "k")
xticks([-2,-1,0,1,2]); yticks([-2,-1,0,1,2])
title(f"$a={a}$"); grid(True)
::: hidden :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
tight_layout()
save("images/scalar-LTI-1-poles")
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::: slides :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
a = 0.0; x0 = 1.0
figure()
t = linspace(0.0, 3.0, 1000)
plot(t, exp(a*t)*x0, "k")
xlabel("$t$"); ylabel("$x(t)$"); title(f"$a={a}$")
grid(); axis([0.0, 2.0, 0.0, 10.0])
::: hidden :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
tight_layout()
save("images/scalar-LTI-0")
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::: slides :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
figure()
plot(real(a), imag(a), "x", color="k")
gca().set_aspect(1.0)
xlim(-3,3); ylim(-3,3);
plot([-3,3], [0,0], "k")
plot([0, 0], [-3, 3], "k")
xticks([-2,-1,0,1,2]); yticks([-2,-1,0,1,2])
title(f"$a={a}$"); grid(True)
::: hidden :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
tight_layout()
save("images/scalar-LTI-0-poles")
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::: slides :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
a = -1.0; x0 = 1.0
figure()
t = linspace(0.0, 3.0, 1000)
plot(t, exp(a*t)*x0, "k")
xlabel("$t$"); ylabel("$x(t)$"); title(f"$a={a}$")
grid(); axis([0.0, 2.0, 0.0, 10.0])
::: hidden :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
tight_layout()
save("images/scalar-LTI-m1")
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::: slides :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
figure()
plot(real(a), imag(a), "x", color="k")
gca().set_aspect(1.0)
xlim(-3,3); ylim(-3,3);
plot([-3,3], [0,0], "k")
plot([0, 0], [-3, 3], "k")
xticks([-2,-1,0,1,2]); yticks([-2,-1,0,1,2])
title(f"$a={a}$"); grid(True)
::: hidden :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
tight_layout()
save("images/scalar-LTI-m1-poles")
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::: slides :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
a = -2.0; x0 = 1.0
figure()
t = linspace(0.0, 3.0, 1000)
plot(t, exp(a*t)*x0, "k")
xlabel("$t$"); ylabel("$x(t)$"); title(f"$a={a}$")
grid(); axis([0.0, 2.0, 0.0, 10.0])
::: hidden :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
tight_layout()
save("images/scalar-LTI-m2")
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::: slides :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
figure()
plot(real(a), imag(a), "x", color="k")
gca().set_aspect(1.0)
xlim(-3,3); ylim(-3,3);
plot([-3,3], [0,0], "k")
plot([0, 0], [-3, 3], "k")
xticks([-2,-1,0,1,2]); yticks([-2,-1,0,1,2])
title(f"$a={a}$"); grid(True)
::: hidden :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
tight_layout()
save("images/scalar-LTI-m2-poles")
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::: slides :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
The origin is globally asymptotically stable when
i.e.
Let the time constant
When the system is asymptotically stable,
time $t$ distance to the origin $|x(t)|$
$$ \dot{x}1 = a_1 x_1, ; x_1(0) = x{10} $$
$$ \dot{x}2 = a_2 x_2, ; x_2(0) = x{20} $$
i.e.
๐ Solution: by linearity
a1 = -1.0; a2 = 2.0; x10 = x20 = 1.0
figure()
t = linspace(0.0, 3.0, 1000)
x1 = exp(a1*t)*x10; x2 = exp(a2*t)*x20
xn = sqrt(x1**2 + x2**2)
plot(t, xn , "k")
plot(t, x1, "k--")
plot(t, x2 , "k--")
xlabel("$t$"); ylabel("$\|x(t)\|$"); title(f"$a_1={a1}, \; a_2={a2}$")
grid(); axis([0.0, 2.0, 0.0, 10.0])
::: hidden :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
tight_layout()
save("images/scalar-LTI-m1p2")
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::: slides :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
figure()
plot(real(a1), imag(a1), "x", color="k")
plot(real(a2), imag(a2), "x", color="k")
gca().set_aspect(1.0)
xlim(-3,3); ylim(-3,3);
plot([-3,3], [0,0], "k")
plot([0, 0], [-3, 3], "k")
xticks([-2,-1,0,1,2]); yticks([-2,-1,0,1,2])
title(f"$a_1={a1}, \; a_2={a2}$")
grid(True)
::: hidden :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
tight_layout()
save("images/scalar-LTI-m1p2-poles")
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::: slides :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
a1 = -1.0; a2 = -2.0; x10 = x20 = 1.0
figure()
t = linspace(0.0, 3.0, 1000)
x1 = exp(a1*t)*x10; x2 = exp(a2*t)*x20
xn = sqrt(x1**2 + x2**2)
plot(t, xn , "k")
plot(t, x1, "k--")
plot(t, x2 , "k--")
xlabel("$t$"); ylabel("$\|x(t)\|$"); title(f"$a_1={a1}, \; a_2={a2}$")
grid(); axis([0.0, 2.0, 0.0, 10.0])
::: hidden :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
tight_layout()
save("images/scalar-LTI-m1m2")
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::: slides :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
figure()
plot(real(a1), imag(a1), "x", color="k")
plot(real(a2), imag(a2), "x", color="k")
gca().set_aspect(1.0)
xlim(-3,3); ylim(-3,3);
plot([-3,3], [0,0], "k")
plot([0, 0], [-3, 3], "k")
xticks([-2,-1,0,1,2]); yticks([-2,-1,0,1,2])
title(f"$a_1={a1}, \; a_2={a2}$")
grid(True)
::: hidden :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
tight_layout()
save("images/scalar-LTI-m1m2-poles")
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::: slides :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
๐ The rightmost
$a_i$ determines the asymptotic behavior, -
๐ The origin is globally asymptotically stable if and only if
every
$a_i$ is in the open left-hand plane.
๐ Solution: formally, the same old solution
But now,
if
a = 1.0j; x0=1.0
figure()
t = linspace(0.0, 20.0, 1000)
plot(t, real(exp(a*t)*x0), label="$\Re(x(t))$")
plot(t, imag(exp(a*t)*x0), label="$\mathrm{Im}(x(t))$")
xlabel("$t$")
legend(); grid()
::: hidden :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
tight_layout()
save("images/scalar-LTI-alt-1")
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::: slides :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
fig = figure()
ax = fig.add_subplot(111, projection="3d")
zticks = ax.set_zticks
ax.plot(t, real(exp(a*t)*x0), imag(exp(a*t)*x0))
xticks([0.0, 20.0]); yticks([]); zticks([])
ax.set_xlabel("$t$")
ax.set_ylabel("$\Re(x(t))$")
ax.set_zlabel("$\mathrm{Im}(x(t))$")
::: hidden :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
tight_layout()
save("images/scalar-LTI-3d")
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::: slides :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
figure()
plot(real(a), imag(a), "x", color="k")
gca().set_aspect(1.0)
xlim(-3,3); ylim(-3,3);
plot([-3,3], [0,0], "k")
plot([0, 0], [-3, 3], "k")
xticks([-2,-1,0,1,2]); yticks([-2,-1,0,1,2])
title(f"$a={a}$"); grid(True)
::: hidden :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
tight_layout()
save("images/scalar-LTI-1j-poles")
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::: slides :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
a = -0.5 + 1.0j; x0=1.0
figure()
t = linspace(0.0, 20.0, 1000)
plot(t, real(exp(a*t)*x0), label="$\Re(x(t))$")
plot(t, imag(exp(a*t)*x0), label="$\mathrm{Im}(x(t))$")
xlabel("$t$")
legend(); grid()
::: hidden :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
tight_layout()
save("images/scalar-LTI-alt-2")
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::: slides :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
fig = figure()
ax = fig.add_subplot(111, projection="3d")
zticks = ax.set_zticks
ax.plot(t, real(exp(a*t)*x0), imag(exp(a*t)*x0))
xticks([0.0, 20.0]); yticks([]); zticks([])
ax.set_xlabel("$t$")
ax.set_ylabel("$\Re(x(t))$")
ax.set_zlabel("$\mathrm{Im}(x(t))$")
::: hidden :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
tight_layout()
save("images/scalar-LTI-3d-2")
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::: slides :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
figure()
plot(real(a), imag(a), "x", color="k")
gca().set_aspect(1.0)
xlim(-3,3); ylim(-3,3);
plot([-3,3], [0,0], "k")
plot([0, 0], [-3, 3], "k")
xticks([-2,-1,0,1,2]); yticks([-2,-1,0,1,2])
title(f"$a={a}$")
grid(True)
::: hidden :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
tight_layout()
save("images/scalar-LTI-m11j-poles")
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::: slides :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
๐ The origin is globally asymptotically stable iff
**$a$ is in the open left-hand plane: **
$\Re (a) < 0$ . -
๐ If
$a =: \sigma + i \omega$ ,-
๐ท๏ธ
$\tau = 1 /|\sigma|$ is the time constant. -
๐ท๏ธ
$\omega$ the rotational frequency of the oscillations.
-
If
The exponential of a matrix
-
๐ elementwise exponential:
exp
(numpy
module), -
๐ exponential:
expm
(scipy.linalg
module).
Let
Compute the exponential of
๐๏ธ Hint:
Compute numerically:
-
exp(M)
(numpy
) -
expm(M)
(scipy.linalg
)
and check the results consistency.
We have
and hence for any
$$ \begin{split} e^{M} &= \sum_{k=0}^{+\infty} \frac{M^k}{k !} \ &= \left( \sum_{j=0}^{+\infty} \frac{1}{(2j) !} \right)I
- \left(\sum_{j=0}^{+\infty} \frac{1}{(2j+1) !} \right)M \ &= \left(\sum_{k=0}^{+\infty} \frac{1^k + (-1)^k}{2(k !)} \right)I
- \left(\sum_{k=0}^{+\infty} \frac{1^k - (-1)^k}{2(k !)} \right)M \
&= (\cosh 1)I + (\sinh 1)M \end{split} $$
Thus,
::: slides :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
>>> M = [[0.0, 1.0], [1.0, 0.0]]
>>> exp(M)
array([[1. , 2.71828183],
[2.71828183, 1. ]])
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::: notebook :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
M = [[0.0, 1.0], [1.0, 0.0]]
exp(M)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::: slides :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
>>> expm(M)
array([[1.54308063, 1.17520119],
[1.17520119, 1.54308063]])
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::: notebook :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
expm(M)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
These results are consistent:
::: slides ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
>>> array([[exp(0.0), exp(1.0)],
... [exp(1.0), exp(0.0)]])
array([[1. , 2.71828183],
[2.71828183, 1. ]])
>>> array([[cosh(1.0), sinh(1.0)],
... [sinh(1.0), cosh(1.0)]])
array([[1.54308063, 1.17520119],
[1.17520119, 1.54308063]])
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::: notebook :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
array([[exp(0.0), exp(1.0)],
[exp(1.0), exp(0.0)]])
array([[exp(0.0), exp(1.0)],
[exp(1.0), exp(0.0)]])
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Note that
Thus, for any
The solution of
is
๐ For any dynamical system, if the origin is a globally asymptotically stable equilibrium, then it is a locally attractive equilbrium.
๐ For linear systems, the converse result also holds.
๐ Let's prove this!
Show that for any linear system
Show that linear system
๐๏ธ Hint: Consider the solutions
If the origin is locally attractive, then there is a
Now, let any
Thus the origin is globally attractive.
Let
the solution
Since
$$ |x_0|1 := \sum{k=1}^n |x_{0k}| \leq \alpha. $$
Since for every
Finally
Thus
Let
The spectrum of
It is characterized by:
Consider the system
-
a mode of the system is an eigenvector of
$A$ , -
a pole of the system is an eigenvalue of
$A$ .
Let
The origin of
all eigenvalues of
Assume that:
$A$ is diagonalizable.
(๐ very likely unless
Let
There is an invertible matrix
Thus, if
The system is G.A.S. iff each component of the system is,
which holds iff
Consider the scalar ODE
Represent this system as a first-order ODE.
Is this system asymptotically stable?
Do the solutions have oscillatory components?
Find the set of associated rotational frequencies.
Same set of questions (1., 2., 3.) for
when
\left[ \begin{array}{rr} 0 & 1 \ -k & 0 \end{array} \right] \left[ \begin{array}{c} x \ \dot{x} \end{array} \right] = A \left[ \begin{array}{c} x \ \dot{x} \end{array} \right] $$
We have
hence the system is not globally asymptotically stable.
Since
\det \left( \begin{array}{rr} s & -1 \ k & s \end{array} \right) =s^2 +k, $$
the spectrum of
The system poles are
The general solution
Thus the components of
\left[ \begin{array}{rr} 0 & 1 \ -k & -b \end{array} \right] \left[ \begin{array}{c} x \ \dot{x} \end{array} \right] = A \left[ \begin{array}{c} x \ \dot{x} \end{array} \right] $$
\det \left( \begin{array}{rr} s & -1 \ k & s +b \end{array} \right) =s^2 + bs+ k, $$
Let
Otherwise,
Thus, if
and otherwise
In each case, the system is globally asymptotically stable.
If
If
thus the solution components oscillate at the rotational frequency
Consider the system
Compute the solution
Compute the solution for an arbitrary
Same questions for the system
for some
๐๏ธ Hint: Find the ODE satisfied by
Is the system asymptotically stable ?
Why does the stability analysis of this system matter ?
Let
The ODE
When
-
$\dot{x}_n=0$ yields$x_n(t) = 1$ , then -
$\dot{x}{n-1}=x_n$ yields $x{n-1}(t) = t$,
-
...
-
$\dot{x}{k} = x{k+1}$ yields $$ x_{k}(t) = \frac{t^{n-k}}{(n-k)!}. $$
To summarize: $$ x(t) = \left[ \begin{array}{c} t^{n-1} / (n-1)! \ \vdots \ t^{n-1-k}/(n-1-k)! \ \vdots \ t \ 1 \end{array} \right] $$
We note that
x_1(0) \left[ \begin{array}{c} 1 \ \vdots \ 0 \ 0 \end{array} \right] + \dots + x_{n-1}(0) \left[ \begin{array}{c} 0 \ \vdots \ 1 \ 0 \end{array} \right] + x_n(0) \left[ \begin{array}{c} 0 \ \vdots \ 0 \ 1 \end{array} \right].$$
Similarly to the previous question, we find that:
\left[ \begin{array}{c} 0 \ \vdots \ 0 \ 1 \ 0 \end{array} \right] ; \to ; x(t) = \left[ \begin{array}{c} t^{n-2} / (n-2)! \ \vdots \ t \ 1 \ 0 \end{array} \right] $$
\left[ \begin{array}{c} 0 \ \vdots \ 1 \ 0 \ 0 \end{array} \right] ; \to ; x(t) = \left[ \begin{array}{c} t^{n-3} / (n-3)! \ \vdots \ 1 \ 0 \ 0 \end{array} \right] $$
And more generally, by linearity:
\left[ \begin{array}{c} \displaystyle x_1(0) + \dots + x_{n-1}(0) \frac{t^{n-2}}{(n-2)!} + x_n(0) \frac{t^{n-1}}{(n-1)!} \ \vdots \ \displaystyle x_{n-2}(0) + x_{n-1}(0) t + x_{n}(0) \frac{t^2}{2} \ x_{n-1}(0) + x_n(0) t \ x_n(0) \end{array} \right]. $$
If
Since
\left[ \begin{array}{c} \displaystyle x_1(0) + \dots + x_n(0) \frac{t^{n-1}}{(n-1)!} \ \vdots \ x_{n-1}(0) + x_n(0) t \ x_n(0) \end{array} \right] e^{\lambda t}. $$
The structure of
-
If
$\Re \lambda < 0$ , then the system is asymptotically stable. -
If
$\Re \lambda \geq 0$ , then the system is not.For example when
$x(0)= (1, 0, \dots, 0)$ , we have $$ x(t) = (1, 0, \dots, 0). $$
Every square complex matrix
Thus, the result of the previous question allows to prove the [๐ Stability Criteria] in the general case.
<style> .reveal p { text-align: left; } .reveal section img { border:0; height:50vh; width:auto; } .reveal section img.medium { border:0; max-width:50vh; } .reveal section img.icon { display:inline; border:0; width:1em; margin:0em; box-shadow:none; vertical-align:-10%; } .reveal code { font-family: Inconsolata, monospace; } .reveal pre code { background-color: white; font-size: 1.5em; line-height: 1.5em; /_ max-height: 80wh; won't work, overriden _/ } /_ .reveal .slides .left { text-align: left; } _/ input { font-family: "Source Sans Pro", Helvetica, sans-serif; font-size: 42px; line-height: 54.6px; } code span.kw { color: inherit; font-weight: normal; } code span.cf { /_ return _/ color: inherit; font-weight: normal; } code span.fl { /_ floats _/ color: inherit; } code span.dv { /_ ints _/ color: inherit; } code span.co { /_ comments _/ font-style: normal; color: #adb5bd; /_ gray 5 _/} code span.st { /_ strings _/ color: inherit; } code span.op { /_ +, = _/ color: inherit; } /*** Details ******************************************************************/ details h1, details h2, details h3{ display: inline; } details summary { cursor: pointer; list-style: '๐ '; } details[open] summary { cursor: pointer; list-style: '๐ '; } summary::-webkit-details-marker { display: none } details[open] summary ~ * { animation: sweep .5s ease-in-out; } @keyframes sweep { 0% {opacity: 0} 100% {opacity: 1} } section p.author { text-align: center; margin: auto; } </style>