Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[INMA1510] Pr #859 #860

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/q6/autolin-INMA1510/notes/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
TYPE=notes
include ../autolin-INMA1510.mk
182 changes: 182 additions & 0 deletions src/q6/autolin-INMA1510/notes/autolin-INMA1510-notes.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
\documentclass[fr,skiptoc]{../../../eplnotes}

\hypertitle{autolin}{6}{INMA}{1510}
{Nathan Jacques}
{Denis Dochain}

\section{Partie commandable/ observable}
Soit une système linéaire $\mathcal{S}$ donné par la représentation d'état
\begin{equation}
\mathcal{S} :
\left\{
\begin{array}{r c l}
\dot{x}(t) &=& A x(t) + B u(t) \\
y(t) &=& C x(t)
\end{array}
\right.
\label{eqn:ss}
\end{equation}
avec $x(t)\in \mathbb{R}^n$, $u(t)\in \mathbb{R}^m$, $A\in \mathbb{R}^{n\times n}$ et $B\in \mathbb{R}^{n\times m}$. La matrice de commandabilité de $\mathcal{S}$ est

\[
\mathcal{C} = \left[ B, AB, \dots, A^{n-1}B \right]
\]
Soit $\text{rang}(\mathcal{C}) = n_c < n$. Posons

\[
T = \left[ \vec{t}_1 \dots \vec{t}_{n_c} | \vec{t}_{n_c+1} \dots \vec{t}_n \right]
\]
où $\vec{t}_1 \dots \vec{t}_{n_c}$ dont les $n_c$ colonnes libres de $\mathcal{C}$ et les $n-n_c$ colonnes restantes sont choisient arbitrairement linéairement indépendantes de $\vec{t}_1 \dots \vec{t}_{n_c}$. Il est clair que $T$ est donc de plein rang.
Soit une transformation d'état $x = Tz$. On a alors

\begin{align*}
\mathcal{S}: \left\{
\begin{array}{r c l}
\dot{x} &=& A x + B u \\
y &=& C x
\end{array}
\right.
&\iff
\left\{
\begin{array}{r c l}
\dot{z} &=& T^{-1} \dot{x} = T^{-1}Ax +T^{-1} B u \\
y &=& C Tz
\end{array}
\right. \\
&\iff
\left\{
\begin{array}{r c l}
\dot{z} &=& T^{-1}A T z +T^{-1} B u \\
y &=& C Tz
\end{array}
\right.
\end{align*}
Notons

\[
U = T^{-1} =
\begin{bmatrix}
U_a \\ U_b
\end{bmatrix}
\]
avec $U_a$ de dimensions $n_c\times n$ et $U_b$ de dimensions $(n-n_c)\times n$.
La dynamique de $z$ peut donc se réécrire

\begin{equation}
\dot{z} = UAT z + UB u
\label{dynz}
\end{equation}
On a

\[
UT =
\begin{bmatrix}
U_a \\ U_b
\end{bmatrix}
\cdot
\begin{bmatrix}
T_a & T_b
\end{bmatrix}
=
\begin{bmatrix}
U_aT_a & U_aT_b \\
U_bT_a & U_bT_b
\end{bmatrix}
=
\begin{bmatrix}
I_{n_c}& \\
& I_{n-n_c}
\end{bmatrix}
= I_n
\]
De là, on tire que $U_bT_a = 0$, ce qui signifie que les colonnes de $T_a$ appartiennent au noyeau de $U_b$. Comme les colonnes de $T_a$ génerent tout le columnspace de $\mathcal{C}$, on peut dire que les colonnes de $\mathcal{C}$ appartiennent au noyeau de $U_b$ \footnote{Pour ceux qui ont un mauvais souvenir du cours d'algèbre, cela revient à dire que multiplier $U_b$ à droite par une colonne de $\mathcal{C}$ (ou une combili des colonnes de $\mathcal{C}$) donnera toujours le vecteur nul }.
Comme $B$ est une colonne de $\mathcal{C}$ et $AT_a$ est composé de combili de colonnes de $\mathcal{C}$, il vient
\[U_bB = 0 \quad \text{ et } \quad U_bAT_a = 0\]
Les matrices de la dynamique de $z$ (\ref{dynz}) deviennent donc

\begin{equation}
UAT =
\begin{bmatrix}
U_aAT_a & U_aAT_b \\
U_bAT_a & U_bAT_b
\end{bmatrix}
=
\begin{bmatrix}
A_c & A_{c\bar{c}}\\
0 & A_{\bar{c}}
\end{bmatrix}
\quad
\text{ et }
\quad
UB =
\begin{bmatrix}
U_aB \\ U_bB
\end{bmatrix}
=
\begin{bmatrix}
B_c \\ 0
\end{bmatrix}
\label{dynmat}
\end{equation}
On a alors

\begin{equation}
\dot{z} \overset{(\ref{dynz})}{=} UAT z + UB u
\overset{(\ref{dynmat})}{=}
\begin{bmatrix}
A_c & A_{c\bar{c}}\\
0 & A_{\bar{c}}
\end{bmatrix}
z +
\begin{bmatrix}
B_c \\ 0
\end{bmatrix}
u
\label{decomp}
\end{equation}
Le vecteur d'état $z$ peut être décomposé en deux parties $z = [z_a|z_b]^T$ où $z_a$ sont les états commandables du système et $z_b$ les états non-commandables. Si on réécrit (\ref{decomp}) sous forme décomposée,

\begin{equation*}
\dot{z} =
\left\{
\begin{array}{r c ll}
\dot{z}_a &=& A_c z_a + A_{c\bar{c}} z_b + B_c u & \text{(partie commandable)}\\
\dot{z}_b &=& A_{\bar{c}} z_b & \text{(partie non-commandable)}
\end{array}
\right.
\end{equation*}
On remarque qu'en effet, la dynamique des états $z_b$ ne dépend plus de l'entrée $u$. On ne peut donc pas les commander.
Analysons le rang de la matrice de commandabilité pour cette transforamtion d'état:

\begin{align*}
\text{rang}(\mathcal{C}_z) &= \text{rang}
\left(
\begin{bmatrix}
UB & (UAT)UB & \dots & (UAT)^{n-1}UB
\end{bmatrix}
\right)\\
\text{comme $U = T^{-1}$ , }&= \text{rang}
\left(
\begin{bmatrix}
UB & UAB & \dots & UA^{n-1}B
\end{bmatrix}
\right)\\
&= \text{rang}
\left(
U
\begin{bmatrix}
B & AB & \dots & A^{n-1}B
\end{bmatrix}
\right)\\
&= \text{rang}(U\mathcal{C})\\
\text{comme $U$ est de plein rang, }&= \text{rang}(\mathcal{C}) = n_c
\end{align*}

Il y a toujours $n_c$ états commandables sur $n$ états au total\footnote{Comme on pouvait le prévoir, le changement de base ne permet pas de changer la propriété de commandabilité ou d'observabilité, ces propriétés étant intrinsèques au système lui-même}.
Cependant, la transformation d'état a permis de mettre en évidence la partie commandable et la partie non-commandable. La dynamique de la partie commandable est donnée par $A_c$ tandis que la partie non-commandable est gérée par la sous-matrice $A_{\bar{c}}$. En effet, il est facile (en utilisant le même raisonnement que ci-dessus, i.e. calculer le rang de la matrice de commandabilité) de montrer que $(A_c,B_c)$ est commandable.
Par ailleurs, cette décomposition en partie commandable/non-commandable est utile pour vérifier la stabilisabilité du système. En effet, la partie non-commandable étant maintenant bien identifiée, on peut vérifier la stabilisabilité en s'intéressant à la matrice $A_{\bar{c}}$.
Si $A_{\bar{c}}$ est stable\footnote{Analyse de stabilité habituelle: signe des valeurs propres, etc}, alors le système est stabilisable.

Tout ce développement se fait de manière parfaitement similaire pour l'analyse d'observabilité / détectabilité.

\end{document}