Esta notación facilita el entendimiento de la sintaxis de la función odeint(). Lo primero que debe hacerse, después de importar los módulos correspondientes, es contruir una función que tome como argumentos el vector u y t y retorne el vector de derivadas de u. En este caso particular las ecuaciones diferenciales no dependen de t (son autónomas), aún así es necesario poner como argumento a t porque lo exige la sintaxis de la función odeint(). Después se establece una condición inicial para el vector u y se construye una lista de valores para t sobre el intervalo en que nos interese tener a la solución. Finalmente se coloca todo lo anterior como argumentos del solver odint() como aparece en el código completo:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
# -*- coding: utf-8 -*- | |
""" | |
Created on Tue Feb 11 13:00:32 2020 | |
@author: Rodolfo E. Escobar U. | |
""" | |
import numpy as np | |
from scipy.integrate import odeint | |
import matplotlib.pyplot as plt | |
from mpl_toolkits.mplot3d import Axes3D | |
def lorenz(u,t): | |
""" | |
Sistema de Lorenz | |
""" | |
s=10; r=28; b=2.667 | |
ux_dot = s*(u[1] - u[0]) | |
uy_dot = r*u[0] - u[1] - u[0]*u[2] | |
uz_dot = u[0]*u[1] - b*u[2] | |
return [ux_dot, uy_dot, uz_dot] | |
#Condicion inicial | |
u0 = [0., 1., 1.05] | |
#Tiempo | |
t = np.linspace(0,100,10000) | |
#Soluciones | |
u = odeint(lorenz,u0,t) | |
#Gráfica | |
fig = plt.figure() | |
ax = fig.gca(projection='3d') | |
ax.plot(u[:,0], u[:,1], u[:,2], 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() |
4 comentarios:
Hola! Por qué las condiciones iniciales son de 0, 1, 1.5? Y por qué en tiempo se usa hasta 10000?
Hola. Para que se vea simétrico puedes usar cualquier condición inicial que pertenezca al conjunto del atractor. Puedes usar cualquier otro conjunto de condiciones iniciales y eventualmente llegara al atractor. Puedes asignar el tiempo de simulación que tu quieras (en el ejemplo es de 0 a 100 con 1000 puntos dentro de ese intervalo). Saludos.
Buenos dias Rodolfo.
me puedes explicar que son las variables r, s, b
Hola, acabo de darme cuenta que el articulo de Wikipedia en ingles (en el que me había basado para hacer el programa) usa rho (r), sigma (s) y beta (b) y en español usa b,a y c. Ese el significado de esas variables: https://en.wikipedia.org/wiki/Lorenz_system
Publicar un comentario