
バタフライエフェクトの概念の計算式とPython
バタフライエフェクトは、非線形システムにおける初期条件のわずかな違いが、結果に大きな影響を与える現象を指します。この概念は、特にカオス理論に関連し、ローレンツ方程式がその代表例です。
以下では、バタフライエフェクトの概念を計算式として説明し、Pythonコードを使って具体例をシミュレートします。

ローレンツ方程式

Pythonコード: バタフライエフェクトのシミュレーション
from scipy.integrate import solve_ivp
import numpy as np
import matplotlib.pyplot as plt
def lorenz_system(t, state, sigma, rho, beta):
"""
ローレンツ方程式
:param t: 時間
:param state: 状態変数 (x, y, z)
:param sigma: プラントル数
:param rho: レイリー数
:param beta: 幾何パラメータ
:return: 微分方程式の結果
"""
x, y, z = state
dxdt = sigma * (y - x)
dydt = x * (rho - z) - y
dzdt = x * y - beta * z
return [dxdt, dydt, dzdt]
# 初期パラメータ
sigma = 10.0
rho = 28.0
beta = 8.0 / 3.0
initial_state_1 = [1.0, 1.0, 1.0] # 初期条件1
initial_state_2 = [1.0001, 1.0, 1.0] # 初期条件2 (わずかな差)
t_span = (0, 50) # 時間範囲
t_eval = np.linspace(t_span[0], t_span[1], 10000) # サンプリング
# システム1の解法
solution1 = solve_ivp(
lorenz_system, t_span, initial_state_1, t_eval=t_eval, args=(sigma, rho, beta)
)
x1, y1, z1 = solution1.y
# システム2の解法
solution2 = solve_ivp(
lorenz_system, t_span, initial_state_2, t_eval=t_eval, args=(sigma, rho, beta)
)
x2, y2, z2 = solution2.y
# 2つのシステム間の差を計算
difference = np.sqrt((x1 - x2)**2 + (y1 - y2)**2 + (z1 - z2)**2)
# 結果をプロット
plt.figure(figsize=(12, 6))
# 軌跡の比較
plt.subplot(1, 2, 1)
plt.plot(t_eval, x1, label="システム1 (x)")
plt.plot(t_eval, x2, label="システム2 (x)", linestyle="dashed")
plt.title("システム1とシステム2の軌跡")
plt.xlabel("時間")
plt.ylabel("x 値")
plt.legend()
plt.grid()
# 差の成長
plt.subplot(1, 2, 2)
plt.plot(t_eval, difference, label="システム間の差")
plt.title("システム間の差の成長")
plt.xlabel("時間")
plt.ylabel("差")
plt.yscale("log") # 対数スケールで表示
plt.legend()
plt.grid()
plt.tight_layout()
plt.show()

コードの説明
初期条件のわずかな違い:
2つのシステムの初期条件は微小な差しかありません。
差の計算:
各時点で2つのシステム間の距離を計算。
グラフのプロット:
軌跡の比較。
時間経過に伴うシステム間の差(対数スケール)。
結果の例
軌跡の比較:
初期のうちは2つのシステムの軌跡がほぼ一致していますが、時間が進むにつれて大きく異なります。
差の成長:
対数スケールでプロットすると、差が指数的に成長することが確認できます。
バタフライエフェクトの応用例
気象予測:
初期条件に非常に敏感で、長期予測が困難。
経済学:
小さなイベントが市場全体に大きな影響を与える。
生態学:
小さな環境変化が生態系全体に波及。
このコードはバタフライエフェクトをローレンツ方程式でシミュレートしたものです。他のカオス的なシステムに応用することも可能ですので、ご要望があればお知らせください! 😊
4o