Tracé de l'attracteur de Lorenz en 3D avec Python

Beginner

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

Introduction

Ce laboratoire est un tutoriel étape par étape pour tracer le « Deterministic Nonperiodic Flow » (Écoulement non périodique déterministe) de Edward Lorenz en 1963 dans un espace tridimensionnel en utilisant mplot3d. Nous utiliserons Python et Matplotlib, qui est une bibliothèque de tracé pour le langage de programmation Python.

Conseils pour la machine virtuelle (VM)

Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Notebook afin d'accéder à Jupyter Notebook pour pratiquer.

Parfois, vous devrez peut-être attendre quelques secondes que Jupyter Notebook ait terminé de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de Jupyter Notebook.

Si vous rencontrez des problèmes lors de votre apprentissage, n'hésitez pas à demander de l'aide à Labby. Fournissez des commentaires après la session, et nous résoudrons rapidement le problème pour vous.

Importation des bibliothèques

Nous commençons par importer les bibliothèques nécessaires : Matplotlib et NumPy.

import matplotlib.pyplot as plt
import numpy as np

Définition de la fonction de Lorenz

Nous définissons la fonction de Lorenz, qui prend trois paramètres et renvoie un tableau de trois valeurs. Nous utilisons les valeurs par défaut s = 10, r = 28 et b = 2.667 pour les paramètres de Lorenz.

def lorenz(xyz, *, s=10, r=28, b=2.667):
    """
    Paramètres
    ----------
    xyz : semblable à un tableau, de forme (3,)
       Point d'intérêt dans l'espace tridimensionnel.
    s, r, b : flottants
       Paramètres définissant l'attracteur de Lorenz.

    Retourne
    -------
    xyz_dot : tableau, de forme (3,)
       Valeurs des dérivées partielles de l'attracteur de Lorenz en *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])

Configuration des paramètres initiaux

Nous configurons les paramètres initiaux pour la simulation, y compris le pas de temps dt, le nombre de pas num_steps et les valeurs initiales pour x, y et 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

Calcul de l'attracteur de Lorenz

Nous calculons l'attracteur de Lorenz en avançant dans le temps et en estimant le point suivant en utilisant le point précédent et la fonction de Lorenz.

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

Tracer l'attracteur de Lorenz

Nous traçons l'attracteur de Lorenz en utilisant le module mplot3d de Matplotlib.

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

ax.plot(*xyzs.T, lw=0.5)
ax.set_xlabel("Axe des X")
ax.set_ylabel("Axe des Y")
ax.set_zlabel("Axe des Z")
ax.set_title("Attracteur de Lorenz")

plt.show()

Résumé

Dans ce tutoriel, nous avons appris à tracer l'attracteur de Lorenz en utilisant Python et Matplotlib. Nous avons défini la fonction de Lorenz, configuré les paramètres initiaux, calculé l'attracteur de Lorenz et l'avons tracé en utilisant le module mplot3d de Matplotlib.