ローレンツ方程式
非線形微分方程式であるローレンツ方程式を解き、その結果を3次元のグラフで表示してみましょう。
ローレンツ系は次の3つの非線形連立微分方程式からなります。
$$
dx/dt = σ(y - x)
$$
$$
dy/dt = x(ρ - z) - y
$$
$$
dz/dt = xy - βz
$$
ここで、$σ、ρ、β$は正の定数です。
以下のPythonコードは、上記のローレンツ方程式を解き、その結果を3Dグラフで表示します。
1 | import numpy as np |
このコードを走らせると、解の軌道がローレンツアトラクターと呼ばれる蝶形の図形を形成します。
これはカオス理論を象徴する図形としてよく知られています。
[実行結果]
ソースコード解説
このコードは、ローレンツ方程式を数値的に解き、結果を3Dグラフとして表示するものです。
1. 必要なライブラリをインポートする:
numpy
(数値計算のため)、scipy.integrate
からのodeint
(常微分方程式を解くため)、matplotlib.pyplot
(グラフ描画のため)、mpl_toolkits.mplot3d
からのAxes3D
(3Dプロットのため)をインポートします。
2. ローレンツ方程式を定義する:
lorenz_system
関数は、ローレンツ方程式を定義しています。
この方程式は3つの微分方程式からなり、特定のパラメータ(sigma
、rho
、beta
)と現在の状態(x
、y
、z
)を受け取ります。
それぞれの微分方程式は次のように表されます。
$$
dx/dt = sigma * (y - x)
$$
$$
dy/dt = x * (rho - z) - y
$$
$$
dz/dt = x * y - beta * z
$$
3. 初期状態を設定する:
initial_state
は、$x、y、z$の初期値を$1.0$として設定します。
4. 時間の範囲を定義する:
t
は$0$から$50$までの時間の範囲を$0.01$刻みで定義します。
5. 微分方程式を解く:
odeint
関数を使用して、lorenz_system
関数に初期状態と時間の範囲を渡して微分方程式を解きます。
6. 結果を3Dグラフで表示する:
solution
は微分方程式の解です。
これを3Dグラフでプロットして、X
、Y
、Z
軸に解の値をプロットし、Lorenz Attractor
というタイトルをつけます。
これにより、ローレンツアトラクタとして知られる複雑な非線形系の挙動が視覚化されます。