Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

03 アイソクラインと局所安定性解析

相図上のアイソクライン (isocline)ヤコビ行列 (Jacobian matrix)固有値 (eigenvalue)を使い,平衡点まわりのダイナミクスを解析する.

アイソクライン

アイソクラインは dxdt=0\frac{dx}{dt} = 0 または dydt=0\frac{dy}{dt} = 0 を満たす曲線(または直線).平衡点 (equilibrium point)はアイソクライン同士の交点として求まる.

被食-捕食系では,

dxdt=0y=ab,dydt=0x=dc\frac{dx}{dt} = 0 \to y = \frac{a}{b}, \qquad \frac{dy}{dt} = 0 \to x = \frac{d}{c}

の水平・垂直の直線となり,平衡点は (0,0)(0, 0)(dc,ab)\left(\frac{d}{c}, \frac{a}{b}\right)

局所安定性解析の流れ

平衡点 x\mathbf{x}^* まわりの微小なずれ n\mathbf{n} を考えると,テイラー展開の 1 次項までで

dndtMn,M=fxx=x\frac{d\mathbf{n}}{dt} \approx \mathbf{M}\,\mathbf{n}, \qquad \mathbf{M} = \left.\frac{\partial \mathbf{f}}{\partial \mathbf{x}}\right|_{\mathbf{x}=\mathbf{x}^*}

となる.M\mathbf{M} の固有値 λi\lambda_i の実部の符号で安定性を判定する.

全固有値の実部が負局所安定性 (local stability) あり(安定平衡点)
1 つでも正の実部不安定平衡点
正負混在で実部が非零鞍点 (saddle point)

具体的な手順は次の 4 ステップ.

  1. 平衡点を求める

  2. ヤコビ行列で線形化する

  3. ヤコビ行列の固有値(と固有ベクトル)を求める

  4. 実部の正負,虚部の有無を調べる

被食-捕食系の (0,0)(0, 0) では,

J(0,0)=(a00d),λ1=a>0,  λ2=d<0\mathbf{J}(0, 0) = \begin{pmatrix} a & 0 \\ 0 & -d \end{pmatrix}, \qquad \lambda_1 = a > 0,\; \lambda_2 = -d < 0

したがって (0,0)(0, 0) は鞍点.

被食-捕食系のダイナミクスとアイソクライン

被食-捕食系のシミュレーション結果に,アイソクラインと平衡点を重ねて描く.

# 03-01. 被食-捕食系のダイナミクスとアイソクライン
import matplotlib.pyplot as plt
# モデルのパラメータ
a = 2.0
b = 3.0
c = 1.0
d = 2.0

# 初期値
x = 0.4
y = 0.4
t = 0.0

# 時間の設定
dt = 0.0001
t_end = 10
i_end = int(t_end / dt) + 1

t_list = [t]
x_list = [x]
y_list = [y]
for i in range(i_end):
    t = dt * (i + 1)
    x = x + dt * (a - b * y) * x
    y = y + dt * (c * x - d) * y
    t_list.append(t)
    x_list.append(x)
    y_list.append(y)
# アイソクライン
plt.axhline(a / b, color="b")
plt.axvline(d / c, color="r")

# 平衡点
plt.plot(0, 0, "ko", d / c, a / b, "ko", markersize=8)

# 相平面上でのダイナミクス
plt.plot(x_list, y_list)
plt.xlabel("Prey")
plt.ylabel("Predator")
<Figure size 640x480 with 1 Axes>

演習