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.