Takuya Kawanishi

5. 線形微分方程式系

5.1 行列の指数関数の計算

数学ツールの多くは, 行列の指数関数(matrix exponential)を直接計算できる.

\[e^A\]
[1]:
# scipy.linalg.expm の例
import scipy.linalg


a = [[-1, -1], [1, -2]]
ea = scipy.linalg.expm(a)
print(ea)
[[ 0.24269012 -0.19626633]
 [ 0.19626633  0.04642379]]

5.2 線形微分方程式系の観点からの行列の分類

相図(phase diagram)

\[\boldsymbol x = e^{tA} \boldsymbol x_0\]
  • 様々な初期値に対する軌跡を描く.

  • (線形の場合, \(t<0\) に遡ることも可.)

次のように分類する.

  • 行列が対角化できる場合で, 固有値が全て実数の場合

  • 行列が対角化できる場合で, 固有値が共役複素数の場合

  • 行列が対角化できない場合(Jordan 標準形 \(2 \times 2\)

5.3 行列が対角化できて固有値が全て実数の場合

  • 行列が次の形とする.

\[\begin{split}A = \begin{bmatrix} a & 0 \\ 0 & -1 \end{bmatrix}\end{split}\]
  • \(a_{22}\)\(-1\)\(1\) に変えると, 時間について反転.

  • 固有ベクトルは \([1, 0]^\mathrm T\), \([0, 1]^\mathrm T\).

  • \(a<0\) のとき, \(e^{tA} \boldsymbol x_0\)\([0, 0]^\mathrm T\) に収束.

    • \(a<-1\) のとき, \(x\) 軸の収束のほうが \(y\) 軸より速い.

    • \(a = -1\) のとき, 同じ速度で収束するので, 相図は放射状になる.

    • \(-1 < a < 0\) のとき, \(y\) 軸の収束のほうが \(x\) 軸より速い.

  • \(a = 0\) のとき, \(x\) 軸は変化せず, \(y\) 軸は \(0\) に収束.

  • \(a > 0\) のとき, \(x\) 軸は発散, \(y\) 軸は \(0\) に収束.

a929e98ee09b43ffb654454d284ee09e

\(a=-2\)

e43009f24de247ef96f405dd36ab8563

\(a=-1\)

a30f4d8740a745e9bccac4331bb6741b

\(a=-0.5\)

c16e1397cddc45a3b791793e14eff6fd

\(a=0\)

c85e261ab09c4218998fe0680febadcb

\(a=1\)

5.4 行列が対角化できて行列の固有値が共役複素数の場合

\[\begin{split}A = \begin{bmatrix} a & -1 \\ 1 & a \end{bmatrix}\end{split}\]
  • \(a< 0\) ならばうずまきながら \([0, 0]^\mathrm T\) に収束する.

  • \(a = 0\) ならば回転する(固有値が純虚数).

  • \(a> 0\) ならばうずまきながら発散する.

3f52547c91134f41b341ca47790f194c

\(a < 0\)

a6479bd2d0e14e68abef030235950ff6

\(a=0\), 固有値が純虚数

708c73df3d28496d8b38165a5eca51c7

\(a>0\)

行列が対角化できて行列の固有値が純虚数の場合

\[\begin{split}A = \begin{bmatrix} 0 & - a \\ a & 0 \end{bmatrix}\end{split}\]

2ea3884f7d62488daff2e6d6256bef0e

For any \(a\)

5.5 行列が対角化できない場合(固有値が縮退している場合)

  • 行列は Jordan 標準形

\[\begin{split}\begin{bmatrix} a & 1 \\ 0 & a \end{bmatrix}\end{split}\]
  • 固有ベクトルは \([1, 0]^\mathrm T\) のみ.

7da615b1c0224eec8039ac804e563bd5

\(a=-1\)

5.6 軌跡の表示

  • 次の行列について, \(e^{tA}\) を考える.

\[\begin{split}A = \begin{bmatrix} -3 & 1 \\ 1& -3 \end{bmatrix}\end{split}\]
[28]:
#### 初期値 [1, 3]^T のときの x(t), y(t)

import matplotlib.pyplot as plt
import numpy as np
import scipy.linalg


a = np.array([[-3.,  1.], [ 1., -3.]])
print('a = ',  a)
eigval, eigvec = np.linalg.eig(a)
print('a eigval', eigval)
print('a eigvec\n', eigvec)

x_0 = np.array([[1], [3]])

ts = np.linspace(0, 3)
xs = []
for t in ts:
    eta = scipy.linalg.expm(t * a)
    x = np.matmul(eta, x_0)
    xs.append(x)

xs = np.array(xs)

fig0, ax0 = plt.subplots()
ax0.set_yscale('log')
ax0.plot(ts, xs[:, 0])
ax0.plot(ts, xs[:, 1])

fig1, ax1 = plt.subplots(figsize=(4,4))
ax1.plot(xs[:, 0], xs[:, 1])
ax1.set_xlim(0, 3)
ax1.set_ylim(0, 3)
a =  [[-3.  1.]
 [ 1. -3.]]
a eigval [-2. -4.]
a eigvec
 [[ 0.70710678 -0.70710678]
 [ 0.70710678  0.70710678]]
[28]:
(0.0, 3.0)
../_images/exercise_process_engineering_2021_exercises_050_13_2.png
../_images/exercise_process_engineering_2021_exercises_050_13_3.png

相図

[3]:
#### Phase Diagram


import matplotlib.pyplot as plt
import numpy as np
import scipy.linalg

a = np.array([[-3.,  1.], [ 1., -3.]])
print('a = ',  a)
eigval, eigvec = np.linalg.eig(a)
print('a eigval', eigval)
print('a eigvec\n', eigvec)

n = 16
x_0s = []
for i in range(n):
    x_0s.append(np.array([np.cos(2 * np.pi * i / n), np.sin(2 * np.pi * i / n)]))

fig, ax = plt.subplots(figsize=(4, 4))
ts = np.linspace(-1, 3)
for x_0 in x_0s:
    xs = []
    for t in ts:
        eta = scipy.linalg.expm(t * a)
        x = np.matmul(eta, x_0)
        xs.append(x)
    xs = np.array(xs)
    ax.plot(xs[:, 0], xs[:, 1], c='k')
ax.set_xlim(-1, 1)
ax.set_ylim(-1, 1)

a =  [[-3.  1.]
 [ 1. -3.]]
a eigval [-2. -4.]
a eigvec
 [[ 0.70710678 -0.70710678]
 [ 0.70710678  0.70710678]]
[3]:
(-1.0, 1.0)
../_images/exercise_process_engineering_2021_exercises_050_15_2.png

課題

課題 5.1

  • 次の行列 \(A\)\(\boldsymbol x_0\) に関して, \(A\) の固有値と固有ベクトル, \(e^{tA} \boldsymbol x_0\) を求めよ.

  • 数学ツールを使って解けばよい.

\[\begin{split}A = \begin{bmatrix} -1 & 1 \\ 1 & -2 \end{bmatrix} , \quad \boldsymbol x_0 = \begin{bmatrix} 0 \\ 1 \end{bmatrix}\end{split}\]
\[\begin{split}A = \begin{bmatrix} -1 & 1 \\ -1 & -2 \end{bmatrix} , \quad \boldsymbol x_0 = \begin{bmatrix} 1 \\ 0 \end{bmatrix} , \ \begin{bmatrix} 0 \\ 1 \end{bmatrix}, \ \ \begin{bmatrix} -1 \\ 0 \end{bmatrix}, \ \begin{bmatrix} 0 \\ -1 \end{bmatrix}, \ \begin{bmatrix} 1 \\ 1 \end{bmatrix}, \ \begin{bmatrix} -1 \\ -1 \end{bmatrix} \ \begin{bmatrix} 1 \\ -1 \end{bmatrix}, \ \begin{bmatrix} -1 \\ 1 \end{bmatrix}\end{split}\]
\[\begin{split}A = \begin{bmatrix} -3 & 1 \\ -1 & -1 \end{bmatrix} , \quad \boldsymbol x_0 = \begin{bmatrix} 1 \\ 0 \end{bmatrix} , \ \begin{bmatrix} 0 \\ 1 \end{bmatrix}, \ \ \begin{bmatrix} -1 \\ 0 \end{bmatrix}, \ \begin{bmatrix} 0 \\ -1 \end{bmatrix}, \ \begin{bmatrix} 1 \\ 1 \end{bmatrix}, \ \begin{bmatrix} -1 \\ -1 \end{bmatrix} \ \begin{bmatrix} 1 \\ -1 \end{bmatrix}, \ \begin{bmatrix} -1 \\ 1 \end{bmatrix}\end{split}\]
\[\begin{split}A = \begin{bmatrix} 0 & 2 \\ -2 & 0 \end{bmatrix} , \quad \boldsymbol x_0 = \begin{bmatrix} 1/2 \\ 0 \end{bmatrix}, \ \begin{bmatrix} 1 \\ 0 \end{bmatrix}\end{split}\]