Python を使った 3D でのローレンツアトラクターの描画

PythonPythonBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験は、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=10r=28b=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、および xyz の初期値が含まれます。

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 モジュールを使用して描画しました。