Graficar el atractor de Lorenz en 3D utilizando Python

PythonPythonBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Este laboratorio es un tutorial paso a paso para trazar el "Flujo no periódico determinista" de Edward Lorenz de 1963 en un espacio tridimensional utilizando mplot3d. Utilizaremos Python y Matplotlib, que es una biblioteca de trazado para el lenguaje de programación Python.

Consejos para la MV

Después de que la máquina virtual (VM) haya terminado de iniciarse, haz clic en la esquina superior izquierda para cambiar a la pestaña Notebook y acceder a Jupyter Notebook para practicar.

A veces, es posible que debas esperar unos segundos para que Jupyter Notebook termine de cargar. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si encuentras problemas durante el aprendizaje, no dudes en preguntar a Labby. Proporciona comentarios después de la sesión y resolveremos rápidamente el problema para ti.

Importar bibliotecas

Comenzamos importando las bibliotecas necesarias: Matplotlib y NumPy.

import matplotlib.pyplot as plt
import numpy as np

Definir la función de Lorenz

Definimos la función de Lorenz, que toma tres parámetros y devuelve una matriz de tres valores. Utilizamos los valores predeterminados s = 10, r = 28 y b = 2.667 para los parámetros de Lorenz.

def lorenz(xyz, *, s=10, r=28, b=2.667):
    """
    Parámetros
    ----------
    xyz : similar a una matriz, forma (3,)
       Punto de interés en el espacio tridimensional.
    s, r, b : float
       Parámetros que definen el atractor de Lorenz.

    Devuelve
    -------
    xyz_dot : matriz, forma (3,)
       Valores de las derivadas parciales del atractor 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])

Configurar los parámetros iniciales

Configuramos los parámetros iniciales para la simulación, incluyendo el paso de tiempo dt, el número de pasos num_steps y los valores iniciales para x, y y 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

Calcular el atractor de Lorenz

Calculamos el atractor de Lorenz avanzando en el tiempo y estimando el siguiente punto utilizando el punto anterior y la función de Lorenz.

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

Graficar el atractor de Lorenz

Graficamos el atractor de Lorenz utilizando el módulo mplot3d de Matplotlib.

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

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

plt.show()

Resumen

En este tutorial, aprendimos cómo graficar el atractor de Lorenz utilizando Python y Matplotlib. Definimos la función de Lorenz, configuramos los parámetros iniciales, calculamos el atractor de Lorenz y lo graficamos utilizando el módulo mplot3d de Matplotlib.