03 アイソクラインと局所安定性解析
相図上のアイソクライン (isocline)とヤコビ行列 (Jacobian matrix)の固有値 (eigenvalue)を使い,平衡点まわりのダイナミクスを解析する.
アイソクライン¶
アイソクラインは または を満たす曲線(または直線).平衡点 (equilibrium point)はアイソクライン同士の交点として求まる.
被食-捕食系では,
の水平・垂直の直線となり,平衡点は と .
局所安定性解析の流れ¶
平衡点 まわりの微小なずれ を考えると,テイラー展開の 1 次項までで
となる. の固有値 の実部の符号で安定性を判定する.
| 全固有値の実部が負 | 局所安定性 (local stability) あり(安定平衡点) |
|---|---|
| 1 つでも正の実部 | 不安定平衡点 |
| 正負混在で実部が非零 | 鞍点 (saddle point) |
具体的な手順は次の 4 ステップ.
平衡点を求める
ヤコビ行列で線形化する
ヤコビ行列の固有値(と固有ベクトル)を求める
実部の正負,虚部の有無を調べる
被食-捕食系の では,
したがって は鞍点.
被食-捕食系のダイナミクスとアイソクライン¶
被食-捕食系のシミュレーション結果に,アイソクラインと平衡点を重ねて描く.
# 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")