Plotten des Lorenz-Attraktors in 3D mit Python

PythonPythonBeginner
Jetzt üben

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

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Dieses Lab ist ein Schritt-für-Schritt-Tutorial zum Plotten des "Deterministic Nonperiodic Flow" von Edward Lorenz aus dem Jahr 1963 in einem dreidimensionalen Raum mit mplot3d. Wir werden Python und Matplotlib verwenden, eine Plotting-Bibliothek für die Programmiersprache Python.

Tipps für die virtuelle Maschine (VM)

Nachdem die VM gestartet wurde, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und auf Jupyter Notebook für die Übung zuzugreifen.

Manchmal müssen Sie möglicherweise einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Operationen kann aufgrund von Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn Sie während des Lernens Probleme haben, können Sie sich gerne an Labby wenden. Geben Sie nach der Sitzung Feedback ab, und wir werden das Problem für Sie umgehend beheben.

Bibliotheken importieren

Wir beginnen mit dem Importieren der erforderlichen Bibliotheken: Matplotlib und NumPy.

import matplotlib.pyplot as plt
import numpy as np

Die Lorenz-Funktion definieren

Wir definieren die Lorenz-Funktion, die drei Parameter entgegennimmt und ein Array mit drei Werten zurückgibt. Wir verwenden die Standardwerte s = 10, r = 28 und b = 2,667 für die Lorenz-Parameter.

def lorenz(xyz, *, s=10, r=28, b=2.667):
    """
    Parameter
    ----------
    xyz : array-ähnlich, Form (3,)
       Punkt von Interesse im dreidimensionalen Raum.
    s, r, b : float
       Parameter, die den Lorenz-Attraktor definieren.

    Rückgabewerte
    -------
    xyz_dot : Array, Form (3,)
       Werte der partiellen Ableitungen des Lorenz-Attraktors an der Stelle *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])

Die Anfangsparameter festlegen

Wir legen die Anfangsparameter für die Simulation fest, einschließlich des Zeitschritts dt, der Anzahl der Schritte num_steps und der Anfangswerte für x, y und z.

dt = 0.01
num_steps = 10000

xyzs = np.empty((num_steps + 1, 3))  ## Need one more for the initial values
xyzs[0] = (0., 1., 1.05)  ## Set initial values

Den Lorenz-Attraktor berechnen

Wir berechnen den Lorenz-Attraktor, indem wir uns durch die Zeit bewegen und den nächsten Punkt anhand des vorherigen Punkts und der Lorenz-Funktion schätzen.

for i in range(num_steps):
    xyzs[i + 1] = xyzs[i] + lorenz(xyzs[i]) * dt

Den Lorenz-Attraktor plotten

Wir plotten den Lorenz-Attraktor mit dem mplot3d-Modul von Matplotlib.

ax = plt.figure().add_subplot(projection='3d')

ax.plot(*xyzs.T, lw=0.5)
ax.set_xlabel("X-Achse")
ax.set_ylabel("Y-Achse")
ax.set_zlabel("Z-Achse")
ax.set_title("Lorenz-Attraktor")

plt.show()

Zusammenfassung

In diesem Tutorial haben wir gelernt, wie man den Lorenz-Attraktor mit Python und Matplotlib plottet. Wir haben die Lorenz-Funktion definiert, die Anfangsparameter festgelegt, den Lorenz-Attraktor berechnet und ihn mit dem mplot3d-Modul von Matplotlib geplottet.