線形システムのフィードバック制御と行列の固有値

大学の1、2年生で線形代数を勉強し、行列やその固有ベクトル、固有値についての知識を得たけど、これは一体何に使うの？という人たちって結構多いんじゃないかと思います。線形代数は工学の実に広い範囲で基礎的な道具として用いる数学ですが、今回はその簡単な例として、線形システムの漸近安定性＆フィードバック制御による安定化の話をしようと思います。システムの漸近安定性とは何か、それは（線形系の）時間発展を表す微分方程式の係数行列の性質とどう関係があるか、それを踏まえてフィードバック制御するときにはどのように考えれば良いか、という流れで説明します。

# 前提とする数学的知識
2×2行列の対角化ができて、1階の線形微分方程式がなんとなく解ければばっちり大丈夫です。実際にはこれらの知識がなくても雰囲気は掴めると思います。また、大学1、2年生で教養レベルの数学を勉強した人向けということにしていますが、教養レベルの数学を全てマスターしている必要もないです。

不安な人向けに一応練習問題を置いておきます。飛ばしても全然いいです。

練習問題1
行列Aを対角化せよ。
$$
A = \begin{pmatrix}
1 & -1 \\\
3 & 5
\end{pmatrix}
$$

<details><summary>略解（クリックすると開きます）</summary><div>
Aの固有方程式は$|A -  \lambda I| = 0$であるから、これを解くと、固有値は$\lambda = 2,4$。

固有値2に対応する固有ベクトルを$\boldsymbol{v}_1$、固有値4に対応する固有ベクトルを$\boldsymbol{v}_2$とする。
$$
\left(A - 2I\right)\boldsymbol{v}_1 = 0
$$
より、固有ベクトルの一つは
$$
\boldsymbol{v}_1 = \begin{pmatrix}
\frac{1}{\sqrt{2}} \\\ 
-\frac{1}{\sqrt{2}}
\end{pmatrix}
$$
である。同様にして、
$$
\boldsymbol{v}_2 = \begin{pmatrix}
\frac{1}{\sqrt{10}} \\\ 
\frac{3}{\sqrt{10}}
\end{pmatrix}
$$
よって、
$$
P = \begin{pmatrix}
\frac{1}{\sqrt{2}} & \frac{1}{\sqrt{10}} \\\
-\frac{1}{\sqrt{2}} & \frac{3}{\sqrt{10}}
\end{pmatrix}
$$
を用いて、
$$
P^{-1}AP = \begin{pmatrix}
2 & 0 \\\
0 & 5
\end{pmatrix}
$$（略解ここまで）
</div></details>



# システムの漸近安定性
そもそもシステムの安定性とはどういうことか、そして安定だと何が嬉しいのかという話です。安定性というと、「何かしらの値が無限大に発散しい」というようなことを指す場合が多いと思っています。機械的なものでも電気的なものでも、あるいはあるいは全く別の仕組みでも、そのシステムに関する何かの量がいくらでも大きく（あるいは小さく）なってしまうのはよくないことが多いです。回路で言えば、電流が大きくなりすぎると発熱がすごいことになって危険だ、とかですね。そういうわけで、システムの性質を知りたいと思ったりシステムを制御しようと思ったときには何かしら適切な安定性を気にすることが大事になります。

システムの安定性というと、BIBO（Boundary Input Boundary Output）安定性というのがいろいろなところで出てきます。これは、入力が有界である限り出力も有界であるということですが、これだけでは、出力されない（外から見えない）内部の状態について不具合が生じる可能性があります。見えていなくてもシステムの内部には存在している状態変数がいくらでも大きくなってしまうようなことがあると不味そうだなというのは想像がつきますよね。

そこで、システムの内部状態まで含めた安定性を考えます。簡単に言えば、時間が十分経過したときにシステムの内部状態が0に落ち着く場合、このシステムは**漸近安定である**と言います。もう少しちゃんと書くと、「自律系の内部状態が（いろいろな変数を並べたものとして）ベクトル$\boldsymbol{x}(t)$で表され、その時間発展が$\boldsymbol{\dot x} = f(\boldsymbol{x})$で表されるとき、任意の初期状態$\boldsymbol{x}(0)$に対して$\lim_{t \to \infty} \\|\boldsymbol{x}\\| _2 = 0$であればこの系は漸近安定であるという」となります。まあ、きちんとした話は教科書や大学の授業でやるのがいいと思います。

# 倒立振子の例
図のような倒立振子のモデルを考えてみましょう。手のひらにホウキを乗せて逆さまに立たせる遊びをやったことがある人もいるんじゃないかと思いますが、あれの1次元バージョンだと思ってください。普通は支点の位置が移動するものが多いと思いますが、今回は簡単に、支点の位置は固定で、必要ならばモーターのような物でトルクを発生させることができるようなモデルを考えます。
![ファイル_000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/345832/91016bd4-ecb7-1666-e4dd-0df88bfccfc2.png)





## 倒立振子の運動方程式
では初めに倒立振子の運動方程式を考えましょう。釣り合いの位置からの角度を$\theta$とすると、運動方程式$ma = F$は
$$
ml\ddot\theta = mg \sin \theta
$$
となります。（変数の上のドットは、一つごとに時間で1階微分することを表します。つまり$\ddot\theta = \frac{\mathrm{d}^2\theta}{\mathrm{d}t^2}$です。）
この方程式は$\sin \theta$を含む非線形な式ですが、非線形は扱いづらいので$\theta \ll 1$の場合を考えることにより、$\sin \theta \approx \theta$と近似して線形化します。係数を整理すると、結局、運動方程式は次の形でかけます。
$$
\ddot\theta = \frac{g}{l} \theta
$$
これは簡単な微分方程式なのでそのままでも解けますが、後の事を考えてここではこの式を
$$
\frac{\mathrm{d}}{\mathrm{d}t}
\begin{pmatrix}
\theta \\\
\dot\theta
\end{pmatrix}
=\begin{pmatrix}
0 & 1 \\\
k & 0
\end{pmatrix}
\begin{pmatrix}
\theta \\\
\dot\theta
\end{pmatrix} 
$$
と書くことにします。ただし、$k := \frac{g}{l}$です。

## 方程式を対角化して解いてみる
ここで、（わざわざ連立微分方程式の形で書いたことには一旦目を瞑って）係数行列を対角化してみましょう。計算は省きますが、
$$
P = \frac{1}{2}\begin{pmatrix}
\frac{1}{k} & -\frac{1}{k} \\\
\frac{1}{\sqrt{k}} & \frac{1}{\sqrt{k}}
\end{pmatrix}, P^{-1} = 
\begin{pmatrix}
k & \sqrt{k} \\\
-k & \sqrt{k}
\end{pmatrix}
$$
によって
$$
\begin{pmatrix}
0 & 1 \\\
k & 0
\end{pmatrix}
= P
\begin{pmatrix}
\sqrt{k} & 0 \\\
0 & -\sqrt{k}
\end{pmatrix}
P^{-1}
$$
と対角化されます。つまり、件の運動方程式は
$$
\boldsymbol{z} = 
\begin{pmatrix}
z_1 \\\
z_2
\end{pmatrix} 
= P^{-1}
\begin{pmatrix}
\theta \\\
\dot\theta
\end{pmatrix}
$$
なるベクトルを用いて
$$
\frac{\mathrm{d}\boldsymbol{z}}{\mathrm{d}t} = \begin{pmatrix}
\sqrt{k} & 0 \\\
0 & -\sqrt{k}
\end{pmatrix}
\boldsymbol{z}
$$
と書くことができます。この式は
$$
\begin{align}
\frac{\mathrm{d}z_1}{\mathrm{d}t} &= \sqrt{k}\ z_1 \\\
\frac{\mathrm{d}z_2}{\mathrm{d}t} &= -\sqrt{k}\ z_2
\end{align}
$$
ということを表すので、
$$
\begin{align}
z_1(t) &=z_1(0) \exp\left(\sqrt{k}\ t\right)\\\
z_2(t) &= z_2(0) \exp\left(-\sqrt{k}\ t\right)
\end{align}
$$
というふうに解けます。$\sqrt{k} > 0$なので、$z_1(0) \neq 0$であれば$\lim_{t \to \infty}\left| z_1\right|= \infty$です。$z_1$は$\theta$と$\dot\theta$の線形結合で書かれているので、少なくともどちらかは無限大に発散してしまいます（実際には近似をしていない元の運動方程式が非線形なので$\infty$にはなりませんが、$0$にはなりません）。よって漸近安定ではないと結論づけられます。この結果は直感的にも正しいですよね。はじめにちょっと傾いていた倒立振子が、時間が経てばいずれ真っ直ぐ逆立ちした状態になるなんてことはありえませんから。

## 固有値に注目してみる
上の議論から、線形変換された変数において、$\exp $の肩には係数行列の固有値が乗っかるということがわかりました。ここから推測される（そしてここでは省きますが、証明される）事実として
**漸近安定⇔係数行列のすべての固有値の実部が負**
というものがあります。

先程の例では、固有値$\sqrt{k}$が正だったので漸近安定ではありませんでした。逆に言うと、固有値の実部が全て負になるようにしてやればこの系を漸近安定にすることができます。


## フィードバック制御して漸近安定にする
それでは実際にフィードバック制御入力を与えて漸近安定にする方法を考えましょう。フィードバック制御というのは、現在の出力や状態から制御入力を決定する方法です。この他に、出力や状態によらず何らかの方法で決めた制御信号を入力する方法もあり、これはフィードフォワード制御と呼ばれています。

今考えている倒立振子の系には、$\theta, \dot\theta$の2つの状態変数があります。今回は、全時刻で両方の値をリアルタイムに知ることができると仮定します。これは結構強い仮定で、実際にはいつも全ての状態変数の情報が得られるわけではないのですが、この辺を説明しだすと大変なので今回はスルーします。興味がある人はオブザーバなどについて少し調べてみてください。

さて、フィードバック制御入力として状態変数$\theta, \dot\theta$の線形結合を考えます。つまり、元の微分方程式が
$$
\ddot\theta = k \theta
$$
であったのに対し、フィードバック制御した場合の微分方程式は
$$
\ddot\theta = k \theta + (\alpha \theta + \beta \dot\theta)
$$
となります。これをフィードバックがない場合と同じように行列を使って書くと
$$
\frac{\mathrm{d}}{\mathrm{d}t}
\begin{pmatrix}
\theta \\\
\dot\theta
\end{pmatrix}
=\begin{pmatrix}
0 & 1 \\\
k+\alpha & \beta
\end{pmatrix}
\begin{pmatrix}
\theta \\\
\dot\theta
\end{pmatrix} 
$$
となります。

では、係数行列の固有値を考えましょう。固有方程式は
$$
\left|
\begin{pmatrix}
0 & 1 \\\
k+\alpha & \beta
\end{pmatrix}
- \lambda I
\right|= 0
$$
より
$$
\lambda^2 - \beta \lambda -(k+\alpha) = 0
$$
です。この解の実部が負となるための必要十分条件は
$$
\text{(1)}\ k+\alpha < 0 \ \  \text{and}\ \ \text{(2)}\ \beta < 0
$$
なので、係数がこの条件を満たすようなフィードバック制御をかけることによって、倒立振子を漸近安定にすることができます。物理的な意味としては、(1)棒が傾いているとき、それを立て直すような向きに力を加える。(2)棒がどちらかに動いているとき、そのスピードを殺すような向きに力を加える。ということになります。(1)だけが成り立っていて$\beta = 0$のときには振子がメトロノームのように振動する、ということも付け加えておきます。

# まとめ
今回の記事では、線形な系の漸近安定性と係数行列の固有値が密接に関わっていることを、具体例を用いて説明しました。フィードバック制御をして漸近安定にする、という話が、数学的には行列の固有値（つまり、固有多項式の根）をどのように配置するかという問題であるということを知ってもらえたなら嬉しいです。今回は安定性に的を絞って話をしましたが、固有値をうまく配置することでどのような挙動を経て状態変数が収束するのか（過渡応答）の設計も行えます。

また、今回は固有値に注目して漸近安定性を論じてきましたが、行列のサイズが大きいときには固有値を求めるのが大変なので、別の方法があったりします。この辺に興味が出てきた人はぜひ、現代制御理論を勉強してみてください。計数工学科でも制御理論（だけでなく、「行列のサイズが大きいときには固有値を求めるのが大変」ということも！）を学ぶことができるので、大学進学を考えている人や前期教養の学生はぜひ、東大工学部の計数工学科への進学を考えてみてください。