見出し画像

バタフライエフェクトの概念の計算式と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()

コードの説明

  1. 初期条件のわずかな違い:

    • 2つのシステムの初期条件は微小な差しかありません。

  2. 差の計算:

    • 各時点で2つのシステム間の距離を計算。

  3. グラフのプロット:

    • 軌跡の比較。

    • 時間経過に伴うシステム間の差(対数スケール)。


結果の例

  1. 軌跡の比較:

    • 初期のうちは2つのシステムの軌跡がほぼ一致していますが、時間が進むにつれて大きく異なります。

  2. 差の成長:

    • 対数スケールでプロットすると、差が指数的に成長することが確認できます。


バタフライエフェクトの応用例

  1. 気象予測:

    • 初期条件に非常に敏感で、長期予測が困難。

  2. 経済学:

    • 小さなイベントが市場全体に大きな影響を与える。

  3. 生態学:

    • 小さな環境変化が生態系全体に波及。


このコードはバタフライエフェクトをローレンツ方程式でシミュレートしたものです。他のカオス的なシステムに応用することも可能ですので、ご要望があればお知らせください! 😊

4o

いいなと思ったら応援しよう!