パラボリックパブロフ方程式

パラボリックパブロフ方程式

パラボリックパブロフ方程式は、次の偏微分方程式で表されます:

$$
\frac{\partial u}{\partial t} = D \frac{\partial^2 u}{\partial x^2} + \alpha u - \beta u^3
$$

ここで、$ (u(x, t)) $は時間 $ (t) $と空間 $ (x) $に依存する関数、$ (D) $は拡散係数、$ (\alpha) $は線形成長率、$ (\beta) $は非線形成長率です。

以下は、この方程式を解く Python コードです。

matplotlibを使ってグラフ化します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp

# パラメータ
D = 1.0
alpha = 0.1
beta = 1.0

# 解くべき偏微分方程式
def parabolic_pablov(t, u):
dudt = D * np.gradient(np.gradient(u)) + alpha * u - beta * u**3
return dudt

# 初期条件
x = np.linspace(-10, 10, 100)
u0 = np.exp(-x**2)

# 時間ステップ
t_span = (0, 10)
t_eval = np.linspace(t_span[0], t_span[1], 100)

# 偏微分方程式の数値解を計算
sol = solve_ivp(parabolic_pablov, t_span, u0, t_eval=t_eval)

# 結果をプロット
plt.figure(figsize=(8, 6))
for i in range(sol.y.shape[1]):
plt.plot(x, sol.y[:, i], label=f"t={sol.t[i]}")
plt.xlabel('x')
plt.ylabel('u')
plt.title('Parabolic Pablov Equation')
plt.grid(True)
plt.show()

このコードでは、初期条件をガウス型の関数として設定し、Scipy の solve_ivp 関数を使って偏微分方程式を数値的に解いています。

結果は matplotlib を使ってグラフ化されます。

[実行結果]

ソースコード解説

以下はコードの詳細な説明です。

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

  • numpy:数値計算のためのライブラリ。
  • matplotlib.pyplot:グラフの描画に使用されるライブラリ。
  • scipy.integrate.solve_ivp:初期値問題を解くためのライブラリ。
1
2
3
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp

2. パラメータの設定:

  • D:拡散係数。
  • alpha:線形成長率。
  • beta:非線形成長率。
1
2
3
D = 1.0
alpha = 0.1
beta = 1.0

3. 偏微分方程式の定義:

  • parabolic_pablov 関数は、時間と空間に関するパラボリックパブロフ方程式を解くための関数です。
    この方程式は、時間空間に依存する関数$ (u(x, t)) $の偏微分方程式です。
1
2
3
def parabolic_pablov(t, u):
dudt = D * np.gradient(np.gradient(u)) + alpha * u - beta * u**3
return dudt

4. 初期条件の設定:

  • x:空間$ (x) $の値を$ -10 $から$ 10 $まで$100$点で等間隔に区切った配列。
  • u0:初期条件を表す関数。
    ここでは、ガウス型の関数が使われています。
1
2
x = np.linspace(-10, 10, 100)
u0 = np.exp(-x**2)

5. 時間ステップの設定:

  • t_span時間の範囲を定義します。
  • t_eval:解を評価する時間ステップを定義します。
1
2
t_span = (0, 10)
t_eval = np.linspace(t_span[0], t_span[1], 100)

6. 偏微分方程式の数値解の計算:

  • solve_ivp 関数を使って偏微分方程式を数値的に解きます。
1
sol = solve_ivp(parabolic_pablov, t_span, u0, t_eval=t_eval)

7. 結果のプロット:

  • 解をグラフ化して可視化します。
1
2
3
4
5
6
7
8
plt.figure(figsize=(8, 6))
for i in range(sol.y.shape[1]):
plt.plot(x, sol.y[:, i], label=f"t={sol.t[i]}")
plt.xlabel('x')
plt.ylabel('u')
plt.title('Parabolic Pablov Equation')
plt.grid(True)
plt.show()

このコードは、パラボリックパブロフ方程式の解を計算し、その結果をグラフ化して視覚化する完全なプログラムです。

結果解説

[実行結果]

このグラフは、パラボリックパブロフ方程式の数値解を示しています。
方程式は時間空間に関して偏微分方程式であり、時間$ (t) $と空間$ (x) $に依存する関数$ (u(x, t)) $の振る舞いを表現します。

  • x軸は空間$ (x) $を表し、$-10 $から$ 10 $の範囲で定義されています。
  • y軸は$ (u(x, t)) $の値を表し、方程式の解の高さを示します。
  • 各線は異なる時間$ (t) $における解を表しており、$t=0 $から$ t=10 $までの時間スパンでプロットされています。
  • 初期条件はガウス型の関数であり、$ (x=0) $でピークを持ち、徐々に$ 0 $に収束しています。
  • 方程式の解は、初期条件に基づいて時間が経過するにつれて変化し、非線形な効果により形状が変わります。

このようにして、グラフは時間と空間におけるパラボリックパブロフ方程式の解の振る舞いを可視化しています。