El modelo de Lorenz 96 es un sistema dinámico formulado por Edward Lorenz en 1996. [1] Se define de la siguiente manera. Para :
donde se supone que y y . Aquí está el estado del sistema y es una constante de fuerza. es un valor común que se sabe que causa un comportamiento caótico.
Se utiliza comúnmente como un problema modelo en la asimilación de datos . [2]
desde scipy.integrate importe odeint importe matplotlib.pyplot como plt importe numpy como np# Estas son nuestras constantes N = 5 # Número de variables F = 8 # Forzandodef L96 ( x , t ): """Modelo de Lorenz 96 con forzamiento constante""" return ( np . roll ( x , - 1 ) - np . roll ( x , 2 )) * np . roll ( x , 1 ) - x + F x0 = F * np . ones ( N ) # Estado inicial (equilibrio) x0 [ 0 ] += 0.01 # Agrega una pequeña perturbación a la primera variable t = np . arange ( 0.0 , 30.0 , 0.01 )x = odeint ( L96 , x0 , t )# Grafica las primeras tres variables fig = plt.figure () ax = fig.add_subplot ( projection = " 3d" ) ax.plot ( x [ :, 0 ], x [ :, 1 ], x [ :, 2 ]) ax.set_xlabel ( " $ x_1$" ) ax.set_ylabel ( " $ x_2 $" ) ax.set_zlabel ( " $ x_3 $" ) plt.show ( )
utilizando DynamicalSystems , PyPlot PyPlot . using3D () # parámetros y condiciones iniciales N = 5 F = 8.0 u₀ = F * unos ( N ) u₀ [ 1 ] += 0.01 # pequeña perturbación # El modelo Lorenz-96 está predefinido en DynamicalSystems.jl: ds = Systems . lorenz96 ( N ; F = F ) # De manera equivalente, para definir una versión rápida explícitamente, haga: struct Lorenz96 { N } end # Estructura para la función de tipo tamaño ( obj :: Lorenz96 { N }) ( dx , x , p , t ) donde { N } F = p [ 1 ] # 3 casos extremos explícitamente (rendimiento) @inbounds dx [ 1 ] = ( x [ 2 ] - x [ N - 1 ]) * x [ N ] - x [ 1 ] + F @inbounds dx [ 2 ] = ( x [ 3 ] - x [ N ]) * x [ 1 ] - x [ 2 ] + F @inbounds dx [ N ] = ( x [ 1 ] - x [ N - 2 ]) * x [ N - 1 ] - x [ N ] + F # entonces el caso general para n en 3 : ( N - 1 ) @inbounds dx [ n ] = ( x [ n + 1 ] - x [ n - 2 ]) * x [ n - 1 ] - x [ n ] + F fin no devuelve nada fin lor96 = Lorenz96 { N }() # crear estructura ds = ContinuousDynamicalSystem ( lor96 , u₀ , [ F ]) # Y ahora evolucionamos una trayectoria dt = 0.01 # tiempo de muestreo Tf = 30.0 # tiempo final tr = trayectoria ( ds , Tf ; dt = dt ) # Y grafica en 3D: x , y , z = columnas ( tr ) plot3D ( x , y , z )