HomeArticlesChaos

The Lorenz Attractor: Three Equations That Broke Prediction

Volume contraction, unstable fixed points, the Hopf threshold at ρ ≈ 24.74, Lyapunov exponents and why weather forecasts have a horizon.

mysimulator teamUpdated June 2026≈ 12 min read▶ Open the simulation

Three equations, one accident

In 1963 Edward Lorenz, a meteorologist at MIT, published Deterministic Nonperiodic Flow — a paper about a drastically simplified model of convection in a layer of fluid heated from below. Truncating the governing equations to the three most important modes leaves a system so small it fits on one line, and yet it does something nobody expected:

dx/dt = σ (y − x)
dy/dt = x (ρ − z) − y
dz/dt = x y − β z

σ = 10      Prandtl number
ρ = 28      Rayleigh number (relative to its critical value)
β = 8/3     geometric aspect ratio

Here x is proportional to the intensity of the convective motion, y to the temperature difference between rising and descending currents, and z to the distortion of the vertical temperature profile. The system is deterministic — no noise, no randomness, three ordinary differential equations — and yet its solutions never repeat and never settle down.

live demo · a trajectory on the Lorenz attractor● LIVE

The famous origin story is real: Lorenz restarted a numerical run from a printout that had rounded 0.506127 to 0.506, expecting a small deviation, and watched the two runs diverge into completely different weather. That is the butterfly effect, and the shape the trajectory traces — two lobes joined like wings — is what makes the name stick twice over.

Why it cannot be periodic, and cannot escape

Two properties pin the behaviour down. First, the system is dissipative. The divergence of the vector field is constant:

∇·F = ∂/∂x[σ(y−x)] + ∂/∂y[x(ρ−z)−y] + ∂/∂z[xy−βz]
    = −σ − 1 − β = −(10 + 1 + 8/3) ≈ −13.67

A constant negative divergence means every volume of initial conditions shrinks exponentially, at a rate e^(−13.67 t). All trajectories are therefore sucked onto a set of zero volume. Second, the motion is bounded: far from the origin the −z and −x terms dominate and pull everything back. So trajectories are squeezed into a zero-volume set that they can never leave, and yet — for these parameter values — they cannot come to rest either.

The fixed points explain the last part. There are three. The origin, and a symmetric pair:

C± = ( ±sqrt(β(ρ−1)), ±sqrt(β(ρ−1)), ρ−1 )
   = ( ±8.485, ±8.485, 27 )   for σ=10, ρ=28, β=8/3

C± are the two centres the trajectory spirals around — one per wing. They are stable for small ρ, but they lose stability in a subcritical Hopf bifurcation at a critical value that follows from the parameters:

ρ_H = σ (σ + β + 3) / (σ − β − 1)
    = 10 · (10 + 8/3 + 3) / (10 − 8/3 − 1) ≈ 24.74

At ρ = 28 we are above that threshold, so all three fixed points are unstable. The trajectory is attracted toward a fixed point, spirals outward from it as the instability grows, is flung across to the other lobe, spirals outward there, and is flung back — forever, without ever repeating. Squeeze the volume to zero, forbid escape, forbid rest: what is left is a strange attractor, a set of fractal structure with an estimated Kaplan–Yorke dimension of about 2.06 — more than a surface, less than a solid.

Sensitive dependence, quantified

"Chaos" has a precise meaning here: nearby trajectories separate exponentially. The rate is the largest Lyapunov exponent λ, and for the classic parameters it is roughly 0.9 per unit of time. An initial error ε grows like ε·e^(λt), which means the error grows by a factor of e every ~1.1 time units and by a factor of 10 every ~2.6.

The practical consequence is brutal and it is the reason weather forecasts have a horizon. Every factor of ten you improve your initial measurement buys you a constant, small extension of the predictable window — not a proportional one. To forecast twice as far ahead you need to square the precision of everything you know. This is not a failure of the model or of the computer: it is a property of the dynamics.

It also means that any numerical trajectory of the Lorenz system is wrong. Floating-point rounding at the 16th digit is an initial error of 10⁻¹⁶, and with λ ≈ 0.9 that error reaches order 1 after roughly 40 time units. What is remarkable — and what makes the pictures trustworthy — is that the computed trajectory, though it is not the trajectory through your initial point, stays close to some true trajectory of the system (the shadowing property). The attractor's shape, its dimension and its statistics are reproducible even though the individual path is not.

Integrating it without lying

The Lorenz system is not Hamiltonian — it has no energy to conserve — so the symplectic argument that favours Verlet for orbits does not apply here. What matters is local accuracy over a short horizon, which is exactly what classical RK4 delivers: four derivative evaluations per step, global error O(h⁴).

function deriv([x, y, z]) {
  return [SIGMA * (y - x),
          x * (RHO - z) - y,
          x * y - BETA * z];
}
// RK4 step
const k1 = deriv(s);
const k2 = deriv(add(s, scale(k1, h / 2)));
const k3 = deriv(add(s, scale(k2, h / 2)));
const k4 = deriv(add(s, scale(k3, h)));
s = add(s, scale(add4(k1, scale(k2, 2), scale(k3, 2), k4), h / 6));

A step of h ≈ 0.005–0.01 keeps the trajectory visually clean. Explicit Euler at the same step will not: it drifts off the attractor's surface and the wings smear. And do not be alarmed when two runs of the same code on different machines diverge — different floating-point orderings are different initial errors, and by construction this system amplifies them.

What it does and does not say about the weather

The Lorenz system is a caricature of convection, not a weather model; nobody forecasts with it. Its importance is conceptual, and it was enormous. It demonstrated that a simple, deterministic, noiseless system can be genuinely unpredictable — that unpredictability does not require complexity or randomness. That killed the assumption that a good enough model plus a good enough measurement gives an arbitrarily long forecast, and it is why modern forecasting is done with ensembles: run the model many times from slightly perturbed initial states and report the spread as a probability rather than a single trajectory as a fact.

A footnote on rigour: for forty years the strange attractor was a numerical observation, not a theorem. In 2002 Warwick Tucker gave a computer-assisted proof that the Lorenz equations at the classical parameters really do possess a strange attractor — settling one of Stephen Smale's list of problems for the twenty-first century.

Frequently asked questions

What exactly is the butterfly effect?

Sensitive dependence on initial conditions: two trajectories that start arbitrarily close together separate exponentially, at a rate given by the largest Lyapunov exponent (about 0.9 per time unit for the classic Lorenz parameters). Any error in the initial state — a rounding error included — eventually grows to the size of the attractor itself, so long-range prediction of an individual trajectory is impossible.

Is the Lorenz system random?

No. It is three deterministic differential equations with no noise term at all: the same initial state always gives the same trajectory. It is unpredictable rather than random — errors in the initial state are amplified exponentially, so in practice the future cannot be known, even though it is fully determined.

Why does my Lorenz trajectory differ from someone else's with identical code?

Because floating-point arithmetic is not associative and different compilers, CPUs or optimisation levels round differently. That is an initial error of about 10⁻¹⁶, which this system amplifies to order 1 after a few dozen time units. The individual path diverges; the shape and statistics of the attractor do not.

Try it live

Everything above runs in your browser — open Lorenz Attractor and change the parameters while it is running. Nothing is installed, nothing is uploaded, the whole model lives in one tab.

▶ Open Lorenz Attractor simulation

What did you find?

Add reproduction steps (optional)