The Lorenz 96 model is a dynamical system formulated by Edward Lorenz in 1996.[1] It is defined as follows. For :
where it is assumed that and and . Here is the state of the system and is a forcing constant. is a common value known to cause chaotic behavior.
It is commonly used as a model problem in data assimilation.[2]
Python simulation
from scipy.integrate import odeintimport matplotlib.pyplot as pltimport numpy as np# These are our constantsN = 5 # Number of variablesF = 8 # Forcingdef L96(x, t): """Lorenz 96 model with constant forcing""" # Setting up vector d = np.zeros(N) # Loops over indices (with operations and Python underflow indexing handling edge cases) for i in range(N): d[i] = (x[(i + 1) % N] - x[i - 2]) * x[i - 1] - x[i] + F return dx0 = F * np.ones(N) # Initial state (equilibrium)x0[0] += 0.01 # Add small perturbation to the first variablet = np.arange(0.0, 30.0, 0.01)x = odeint(L96, x0, t)# Plot the first three variablesfig = 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()
Julia simulation
using DynamicalSystems, PyPlotPyPlot.using3D()# parameters and initial conditionsN = 5F = 8.0u₀ = F * ones(N)u₀[1] += 0.01 # small perturbation# The Lorenz-96 model is predefined in DynamicalSystems.jl:ds = Systems.lorenz96(N; F = F)# Equivalently, to define a fast version explicitly, do:struct Lorenz96{N} end # Structure for size typefunction (obj::Lorenz96{N})(dx, x, p, t) where {N} F = p[1] # 3 edge cases explicitly (performance) @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 # then the general case for n in 3:(N - 1) @inbounds dx[n] = (x[n + 1] - x[n - 2]) * x[n - 1] - x[n] + F end return nothingendlor96 = Lorenz96{N}() # create structds = ContinuousDynamicalSystem(lor96, u₀, [F])# And now evolve a trajectorydt = 0.01 # sampling timeTf = 30.0 # final timetr = trajectory(ds, Tf; dt = dt)# And plot in 3D:x, y, z = columns(tr)plot3D(x, y, z)
References
🔥 Top keywords: Main PageSpecial:SearchPage 3Wikipedia:Featured picturesHouse of the DragonUEFA Euro 2024Bryson DeChambeauJuneteenthInside Out 2Eid al-AdhaCleopatraDeaths in 2024Merrily We Roll Along (musical)Jonathan GroffJude Bellingham.xxx77th Tony AwardsBridgertonGary PlauchéKylian MbappéDaniel RadcliffeUEFA European Championship2024 ICC Men's T20 World CupUnit 731The Boys (TV series)Rory McIlroyN'Golo KantéUEFA Euro 2020YouTubeRomelu LukakuOpinion polling for the 2024 United Kingdom general electionThe Boys season 4Romania national football teamNicola CoughlanStereophonic (play)Gene WilderErin DarkeAntoine GriezmannProject 2025