ポピュレーションダイナミクス SciPy

ポピュレーションダイナミクス

微分方程式を解いて、ポピュレーションダイナミクスをシミュレーションします。

問題: ロジスティック成長モデルに基づいて、ある生態系内の生物のポピュレーションの増加をモデル化し、シミュレーションしましょう。

ロジスティック成長モデルは以下の微分方程式で表されます:

$$
dy/dt = r * y * (1 - (y/K))
$$

ここで、$ dy/dt $は時間に対するポピュレーションの変化率、$y$はポピュレーションの大きさ、$r$は成長率、$K$はキャリング・キャパシティ(生態系が支持できる最大ポピュレーション)です。

まず、必要なライブラリをインポートし、微分方程式を設定します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp

# ロジスティック成長モデルの微分方程式
def logistic_growth(t, y, r, K):
dydt = r * y * (1 - (y / K))
return dydt

# 初期条件
y0 = [10] # 初期ポピュレーションのサイズ
r = 0.1 # 成長率
K = 100 # キャリング・キャパシティ

# シミュレーションを実行
t_span = (0, 100) # シミュレーション時間
solution = solve_ivp(logistic_growth, t_span, y0, args=(r, K), t_eval=np.linspace(0, 100, 1000))

シミュレーション結果をグラフ化してみましょう。

1
2
3
4
5
6
7
8
plt.figure(figsize=(8, 6))
plt.plot(solution.t, solution.y[0], label='Population')
plt.xlabel('Time')
plt.ylabel('Population Size')
plt.title('Population Dynamics by Logistic Growth Model')
plt.legend()
plt.grid(True)
plt.show()

このグラフは、ロジスティック成長モデルに基づいてシミュレーションされた生物のポピュレーションサイズの時間変化を示しています。

成長率$(r)$とキャリング・キャパシティ$(K)$の値に応じて、ポピュレーションの増減がどのように変化するかを観察できます。

SciPyを使用して微分方程式を解くことで、生態学的な問題をシミュレーションし、結果を可視化できます。

ソースコード解説

ソースコードの詳細な説明を示します:

1. ライブラリのインポート:

  • numpy:数値計算を支援するライブラリ。
  • matplotlib.pyplot:グラフの描画を行うためのライブラリ。
  • scipy.integrate.solve_ivp:微分方程式の数値積分ソルバーを提供するSciPyライブラリからのsolve_ivp関数をインポート。

2. ロジスティック成長モデルの微分方程式:

  • logistic_growth関数は、ロジスティック成長モデルの微分方程式を定義します。
    この方程式は、ポピュレーションサイズ$(y)$、成長率$(r)$、キャリング・キャパシティ$(K)$に依存しています。
    微分方程式を解いてポピュレーションの変化を計算します。

3. 初期条件の設定:

  • y0は初期ポピュレーションのサイズを指定します。
    ここでは10と設定されています。
  • rは成長率を指定します。
    ここでは0.1と設定されています。
  • Kはキャリング・キャパシティ(生態系が支持できる最大ポピュレーションサイズ)を指定します。
    ここでは100と設定されています。

4. シミュレーションの実行:

  • t_spanはシミュレーションの時間範囲を指定します。
    ここでは0から100の範囲となっています。
  • solve_ivp関数は、微分方程式を数値的に解きます。
    logistic_growth関数を使用し、初期条件、成長率、キャリング・キャパシティ、時間の評価ポイント(t_eval)を指定します。
    t_evalは0から100までの1000個の評価ポイントを等間隔で生成します。

5. グラフの描画:

  • plt.figureで新しいグラフの図を作成し、サイズを指定します。
  • plt.plotで時間に対するポピュレーションの変化を表す曲線を描画します。
    ラベルは「Population」と設定されています。
  • plt.xlabelplt.ylabelでX軸とY軸のラベルを設定します。
  • plt.titleでグラフのタイトルを設定します。
  • plt.legendで凡例を表示します。
  • plt.gridでグラフにグリッドを追加します。
  • plt.showでグラフを表示します。

このソースコードは、ロジスティック成長モデルに基づくポピュレーションの時間変化をシミュレーションし、その結果を視覚化するためのものです。

成長率キャリング・キャパシティの値によって、ポピュレーションの挙動がどのように変化するかを観察できます。

グラフ解説

このグラフは、ロジスティック成長モデルに基づいてシミュレーションされた生物のポピュレーションダイナミクスを示しています。

以下はグラフの詳細な説明です:

X軸(Horizontal Axis):

時間(Time)を表しています。
単位はシミュレーションの設定に依存しますが、例では0から100までの時間が表示されています。

Y軸(Vertical Axis):

ポピュレーションのサイズ(Population Size)を表しています。
単位はポピュレーションの個体数や単位に依存します。
初期条件ではポピュレーションサイズが10から始まります。

曲線(Curve):

曲線は時間に対するポピュレーションサイズの変化を示しています。
最初はポピュレーションサイズが急速に増加しますが、成長率(r)やキャリング・キャパシティ(K)に制約され、増加が飽和していきます。

ラベル(Label):

曲線には「Population」というラベルが付いており、どのデータが表示されているかを示しています。

X軸ラベル(X-Axis Label):

X軸には「Time」というラベルが付いており、時間を表しています。

Y軸ラベル(Y-Axis Label):

Y軸には「Population Size」というラベルが付いており、ポピュレーションのサイズを表しています。

タイトル(Title):

グラフのタイトルは「Population Dynamics by Logistic Growth Model」となっており、グラフが何を示しているかを要約しています。

凡例(Legend):

凡例には「Population」というエントリが含まれており、曲線が何を表しているかを説明しています。

グリッド(Grid):

グラフには背景にグリッドが表示されており、データの視覚的な評価を支援しています。

このグラフは、ロジスティック成長モデルにおけるポピュレーションの時間変化を示し、成長率とキャリング・キャパシティがポピュレーションサイズに与える影響を可視化しています。

初期急増後、成長が飽和し、ポピュレーションサイズが安定する様子が観察できます。