本シリーズでは、制御工学で学ぶ基本的な知識から実際の応用例までを、なるべく分かりやすく解説しています。
前回は、連続時間システムと離散時間システムについて、固有値を使った安定性を確認する方法を紹介しました。
前回までの記事では、線形システムを取り扱いました。
しかし、世の中には数多くの非線形システムが存在します。
今回からの記事では、非線形なシステムの例として振り子を用いて、非線形システムを線形に変換する方法を紹介していきたいと思います。
非線形システムを線形化する方法
非線形関数fで与えられる非線形システム
$$ \dot{\boldsymbol{ x }} = f \left( \boldsymbol{ x } \right) $$
をそのまま制御することは複雑で、取り扱いが難しくなります。
そのため、非線形システムを線形化し
$$ \dot{\boldsymbol{ x }} = \boldsymbol{ A } \boldsymbol{ x } $$
のように線形システムの常微分方程式の形に変換することで、与えられたシステムを扱いやすくすることが出来ます。
非線形な関数で与えられた非線形システムを線形なシステムに変更するためには
- 平衡点を見つける
- 非線形関数を偏微分する
- 平衡点を代入する
の3つのステップで、線形化を行います。
平衡点を見つける
非線形システムを線形化する1つ目のステップとして、システムの平衡点(Fixed Point)を見つけます。
平衡点\(\boldsymbol{\bar{x}}\)とは、システムの状態xが制止する点で、以下の式で表されます。
$$ \boldsymbol{ \bar{x} } \quad \mathrm{s.t.} \quad f \left( \boldsymbol{ \bar{x} } \right) = 0 $$
つまり、与えられた非線形関数fに状態\(\boldsymbol{x}\)を入力した値が0になれば、その状態\(\boldsymbol{x}\)は平衡点\(\boldsymbol{\bar{x}}\)と言えます。
ちなみに、今回取り扱っている振り子の場合、振り子が真っすぐ下を向いている時、および上を向いている時に、この振り子の状態は平衡点になります。
(詳しくは後の記事で説明します。)
非線形関数を偏微分する
次に、非線形システムを線形化するための2つ目のステップとして、非線形関数fの偏微分を行います。
非線形関数fの状態xでの偏微分は
$$ \left. \frac{D\boldsymbol{f}}{D\boldsymbol{x}} \right| _\boldsymbol{\bar{x}} = \left[ \frac{\partial f_i}{\partial x_j} \right] $$
という式で表されます。
もし非線形システムが
$$ \begin{eqnarray} \left\{ \begin{array}{l} \dot{x_1} = f_1 \left(x_1,x_2\right) = x_1 x_2 \\ \dot{x_2} = f_2 \left(x_1,x_2\right) = {x_1}^2 + {x_2}^2 \end{array} \right. \end{eqnarray} $$
のように与えられた場合、この偏微分Df/Dxは、
$$ \begin{eqnarray} \frac{D\boldsymbol{f}}{D\boldsymbol{x}} &=& \begin{bmatrix} \frac{\partial f_1}{\partial x_1} & \frac{\partial f_1}{\partial x_2} \\ \frac{\partial f_2}{\partial x_1} & \frac{\partial f_2}{\partial x_2} \end{bmatrix} \\ &=& \begin{bmatrix} x_2 & x_1 \\ 2x_1 & 2x_2 \end{bmatrix} \end{eqnarray} $$
のように求められます。
このように求めた偏微分Df/Dxに平衡点\(\boldsymbol{\bar{x}}\)を代入することで、線形システムの状態方程式に用いる行列Aを求めることが出来ます。
では、なぜ偏微分Df/Dxから行列Aを求めることが出来るのかについては、以下で説明します。
平衡点を代入する
最後に、3つ目のステップとして、状態xが制止する平衡点\(\boldsymbol{\bar{x}}\)を用いてシステムを線形化します。
つまり、非線形システムを表す非線形の関数f
$$ \dot{\boldsymbol{ x }} = f \left( \boldsymbol{ x } \right) $$
を用いて、線形システムの状態方程式
$$ \dot{\boldsymbol{ x }} = \boldsymbol{ A } \boldsymbol{ x } $$
に含まれる行列Aを求める方法を紹介します。
この行列Aを求めるために、平衡点\(\boldsymbol{\bar{x}}\)まわりで非線形関数fのテイラー展開を用います。
非線形関数fを平衡点\(\boldsymbol{\bar{x}}\)まわりでテイラー展開すると
$$ \begin{eqnarray} \dot{\boldsymbol{ x }} &=& f \left( \boldsymbol{ x } \right) \\ &=& f \left( \boldsymbol{\bar{x}} \right) + \left. \frac{D\boldsymbol{f}}{D\boldsymbol{x}} \right| _\boldsymbol{\bar{x}} \left(\boldsymbol{ x } – \boldsymbol{\bar{x}} \right) + \left. \frac{D^2 \boldsymbol{f}}{D \boldsymbol{x}^2} \right| _\boldsymbol{\bar{x}} \left(\boldsymbol{ x } – \boldsymbol{\bar{x}} \right)^2 + \left. \frac{D^3 \boldsymbol{f}}{D \boldsymbol{x}^3} \right| _\boldsymbol{\bar{x}} \left(\boldsymbol{ x } – \boldsymbol{\bar{x}} \right)^3 + \cdots \end{eqnarray}$$
となります。
ここで、平衡点\(\boldsymbol{\bar{x}}\)は
$$ f \left( \boldsymbol{ \bar{x} } \right) = 0 $$
となるようにステップ1で選択しています。
そのため、テイラー展開した後の式に含まれる最初の項は0になります。
そして、システムの状態を平衡点まわりで動作させるとすると、状態\(\boldsymbol{x}\)と平衡点\(\boldsymbol{\bar{x}}\)の差\(\boldsymbol{x}-\boldsymbol{\bar{x}}\)はとても小さくなるため
$$ \begin{eqnarray} \left(\boldsymbol{ x } – \boldsymbol{\bar{x}} \right)^2 &=& 0 \\ \left(\boldsymbol{ x } – \boldsymbol{\bar{x}} \right)^3 &=& 0 \\ \left(\boldsymbol{ x } – \boldsymbol{\bar{x}} \right)^n &=& 0 \end{eqnarray} $$
のように状態\(\boldsymbol{x}\)と平衡点\(\boldsymbol{\bar{x}}\)の差の2乗以降の項を0とみなすことが出来ます。
これより、先ほどのテイラー展開を用いた式は
$$ \begin{eqnarray} \Delta \boldsymbol{\dot{x}} = \left. \frac{D\boldsymbol{f}}{D\boldsymbol{x}} \right| _\boldsymbol{\bar{x}} \Delta \boldsymbol{x} \\ \Rightarrow \Delta \boldsymbol{\dot{x}} = \boldsymbol{A} \Delta \boldsymbol{x} \end{eqnarray}$$
のように、ステップ2で求めた非線形関数の偏微分を用いた式で表すことが出来ます。
よって、偏微分Df/Dxに平衡点\(\boldsymbol{\bar{x}}\)を代入することで、非線形システムを線形化し、線形システムの状態方程式で表すことが出来ました。
まとめ
今回は、非線形システムを線形に変換する方法を紹介しました。
今回紹介した通り、取り扱うシステムが非線形関数で与えられた場合は、状態の平衡点を求め、非線形関数を偏微分した行列に代入することで、線形システムに変換することが出来ます。
次回は、振り子を例として用いて、実際に非線形システムを線形化する方法を紹介したいと思います。