はじめに
この実験は、mplot3d を使用して 3 次元空間でエドワード・ローレンツの 1963 年の「決定論的非周期的流れ (Deterministic Nonperiodic Flow)」をプロットするためのステップバイステップのチュートリアルです。Python と、Python プログラミング言語用のプロットライブラリである Matplotlib を使用します。
VM のヒント
VM の起動が完了したら、左上隅をクリックして Notebook タブに切り替え、Jupyter Notebook を開いて練習を始めましょう。
時々、Jupyter Notebook の読み込みが完了するまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題が発生した場合は、いつでも Labby に質問してください。セッション終了後にフィードバックを提供していただければ、迅速に問題を解決します。
ライブラリのインポート
必要なライブラリである Matplotlib と NumPy をインポートして始めましょう。
import matplotlib.pyplot as plt
import numpy as np
ローレンツ関数の定義
3 つのパラメータを受け取り、3 つの値の配列を返すローレンツ関数を定義します。ローレンツパラメータには、デフォルト値 s=10、r=28、b=2.667 を使用します。
def lorenz(xyz, *, s=10, r=28, b=2.667):
"""
パラメータ
----------
xyz : array-like, shape (3,)
3 次元空間内の関心点。
s, r, b : float
ローレンツアトラクターを定義するパラメータ。
戻り値
-------
xyz_dot : array, shape (3,)
*xyz* におけるローレンツアトラクターの偏導関数の値。
"""
x, y, z = xyz
x_dot = s*(y - x)
y_dot = r*x - y - x*z
z_dot = x*y - b*z
return np.array([x_dot, y_dot, z_dot])
初期パラメータの設定
シミュレーションの初期パラメータを設定します。これには、時間ステップ dt、ステップ数 num_steps、および x、y、z の初期値が含まれます。
dt = 0.01
num_steps = 10000
xyzs = np.empty((num_steps + 1, 3)) ## 初期値の分を 1 つ追加する必要があります
xyzs[0] = (0., 1., 1.05) ## 初期値を設定します
ローレンツアトラクターの計算
時間を進めながら、前の点とローレンツ関数を使用して次の点を推定することで、ローレンツアトラクターを計算します。
for i in range(num_steps):
xyzs[i + 1] = xyzs[i] + lorenz(xyzs[i]) * dt
ローレンツアトラクターの描画
Matplotlib の mplot3d モジュールを使用してローレンツアトラクターを描画します。
ax = plt.figure().add_subplot(projection='3d')
ax.plot(*xyzs.T, lw=0.5)
ax.set_xlabel("X Axis")
ax.set_ylabel("Y Axis")
ax.set_zlabel("Z Axis")
ax.set_title("Lorenz Attractor")
plt.show()
まとめ
このチュートリアルでは、Python と Matplotlib を使用してローレンツアトラクターを描画する方法を学びました。ローレンツ関数を定義し、初期パラメータを設定し、ローレンツアトラクターを計算し、Matplotlib の mplot3d モジュールを使用して描画しました。