サイトマップ

はじめての現代制御理論 講義07 システムの応答~状態方程式の解~

講義07 システムの応答~状態方程式の解~

一応、システムを定めれば解析的には解ける
が、現実はそんなに甘くないので、制御が必要

状態方程式の解

 \displaystyle
\dot{x}(t) = A x(t) + b u(t) \\

の解を求める

両辺に左から  e^{-At} をかけて変形していく

 \displaystyle
\begin{eqnarray}
e^{-At} \dot{x}(t) - e^{-At} A x(t) &=& e^{-At} b u(t) \\
\frac{d}{dt} [ e^{-At} x(t) ] &=& e^{-At} b u(t) \\
\end{eqnarray}

 t \rightarrow \tau に変換して、 \int_{0}^{t} d \tau (0から tまで積分)すると

 \displaystyle
e^{-At} x(t) - x(0) = \int_0^t e^{-A \tau} b u(\tau) d \tau
 \displaystyle
\begin{eqnarray}
x(t) &=& e^{At} x(0) + e^{At} \int_0^t e^{-A \tau} b u(\tau) d \tau \\
&=& e^{At} x(0) + \int_0^t e^{A (t - \tau)} b u(\tau) d \tau
\end{eqnarray}

第1項は、自由応答と同じ
第2項は、入力(操作量)を積分したものになる

2x2の具体例

下記のシステムについて

 \displaystyle
\frac{d}{dt}
\begin{bmatrix}
    x_1 (t) \\
    x_2 (t)
\end{bmatrix}
= \begin{bmatrix}
    0   &  1  \\
    -6  &  -5
\end{bmatrix}
\begin{bmatrix}
    x_1 (t) \\
    x_2 (t)
\end{bmatrix}
+
\begin{bmatrix}
    0 \\
    1
\end{bmatrix}
u(t)
 \displaystyle
x(0) =
\begin{bmatrix}
    1 \\
    0
\end{bmatrix}
 \displaystyle
u(t) = 1

講義06から

 \displaystyle
e^{At} =
\begin{bmatrix}
    3 e^{-2 t} - 2 e^{-3 t} & e^{-2 t} - e^{-3 t} \\
    -6 e^{-2 t} + 6 e^{-3 t} & -2 e^{-2 t} + 3 e^{-3 t}
\end{bmatrix}

入力を考えると

 \displaystyle
\begin{aligned}
e^{A (t - \tau)} b u(\tau)
&=
e^{A (t - \tau)}
\begin{bmatrix}
    0 \\
    1
\end{bmatrix}
\times 1 \\
&=
\begin{bmatrix}
    e^{-2 (t - \tau)} - e^{-3 (t - \tau)} \\
    -2 e^{-2 (t - \tau)} + 3 e^{-3 (t - \tau)}
\end{bmatrix}
\end{aligned}

積分すると

 \displaystyle
\begin{aligned}
\int_0^t e^{A (t - \tau)} b u(\tau) d \tau
&=
\begin{bmatrix}
    [ \frac{1}{2} e^{-2 (t - \tau)} - \frac{1}{3} e^{-3 (t - \tau)} ]_0^t \\
    [ - e^{-2 (t - \tau)} + e^{-3 (t - \tau)} ]_0^t 
\end{bmatrix} \\
&=
\begin{bmatrix}
    ( \frac{1}{2} - \frac{1}{3} ) - ( \frac{1}{2} e^{-2 t} - \frac{1}{3} e^{-3 t} ) \\
    ( -1 + 1 ) - ( - e^{-2 t} + e^{-3 t} ) 
\end{bmatrix} \\
&=
\begin{bmatrix}
    \frac{1}{6} - \frac{1}{2} e^{-2 t} + \frac{1}{3} e^{-3 t} \\
    e^{-2 t} - e^{-3 t} 
\end{bmatrix}
\end{aligned}

自由応答の第1項と合わせると解は

 \displaystyle
\begin{aligned}
x(t)
&=
\begin{bmatrix}
    3 e^{-2 t} - 2 e^{-3 t} + \frac{1}{6} - \frac{1}{2} e^{-2 t} + \frac{1}{3} e^{-3 t} \\
    -6 e^{-2 t} + 6 e^{-3 t}  + e^{-2 t} - e^{-3 t} 
\end{bmatrix} \\
&=
\begin{bmatrix}
    \frac{1}{6} - \frac{5}{2} e^{-2 t} - \frac{5}{3} e^{-3 t} \\
    -5 e^{-2 t} + 5 e^{-3 t} 
\end{bmatrix}
\end{aligned}

グラフにすると下図になる

fig = plt.figure(figsize=(6, 4))
ax = fig.add_subplot(111)
t = np.arange(0, 10, 0.001)
x1_arr =  1/6 + (5/2) * np.exp(-2 * t) - (5/3) * np.exp(-3 * t)
x2_arr = -5 * np.exp(-2 * t) + 5 * np.exp(-3 * t)
ax.plot(t, x1_arr, '-',  label='x1')
ax.plot(t, x2_arr, '--', label='x2')
ax.grid()
ax.legend()
ax.set_xlim(0, 10)
ax.set_ylim(-1.0, 1.0)
fig.tight_layout()

Pythonによる数値シミュレーション

実際に、状態方程式を逐次計算した場合をシミュレーションしてみる

x1_arr = [1.0]
x2_arr = [0.0]
t = [0.0]

dt = 0.001
for i in range(10000):
    x1_arr += [x1_arr[-1] + (0  * x1_arr[-1] + 1  * x2_arr[-1] + 0.0 * 1.0) * dt]
    x2_arr += [x2_arr[-1] + (-6 * x1_arr[-1] + -5 * x2_arr[-1] + 1.0 * 1.0) * dt]
    t      += [t[-1] + dt]
fig = plt.figure(figsize=(6, 4))
ax = fig.add_subplot(111)
ax.plot(t, x1_arr, '-',  label='x1')
ax.plot(t, x2_arr, '--', label='x2')
ax.grid()
ax.legend()
ax.set_xlim(0, 10)
ax.set_ylim(-1.0, 1.0)
fig.tight_layout()

解析結果と同じになる

参考文献

この記事は以下の書籍を参考にしましたが、
私の拙い知識で書いておりますので、誤り等ありましたらご指摘ください