Signal and Sensation

How Far Ahead You Can See

Eight copies of the same system, started a billionth apart. They move as one and then they do not, and the moment they stop agreeing is a number. A thousand times more precision buys 2.6 more seconds.

Open fullscreen →

What it is

Eight copies of the Lorenz system, started a billionth of a unit apart from each other.

They trace the same butterfly, in the same place, at the same time. Each one has its own colour and while they agree the colours sit on top of each other and the trail is white. Each one also has its own voice, pitched by where it is, and while they agree that’s one voice.

Then they stop agreeing. The trail fans out into eight colours and the one voice becomes eight. On the page that happens 8.8 seconds in.

Start them a thousand times closer and it happens 2.6 seconds later. Not a thousand times later, 2.6 seconds later.

How it works

Two copies of a chaotic system separate by a fixed factor per unit of time, and the exponent of that growth is the whole story. Measure it once and everything else is arithmetic: how long you get, what an extra decimal place buys, and why it buys so little.

The measurement is the standard trick. Run two copies a hair apart, let the gap grow for half a time unit, note how much it grew, then pull the second copy back to the same tiny distance along the same direction it had drifted. Averaging the log of the growth gives the rate. The pulling back is the method rather than a detail, because without it the gap stops at the size of the attractor and the average rate falls to zero, which is true and useless.

Over 2000 time units that gives 0.9014, against a published 0.9056. The Lyapunov time, which is one over that, is 1.109 time units.

Lorenz time is dimensionless, so the page picks a speed: three time units per second of watching. Every second on screen is three units, and that’s where the seconds in this post come from.

From there, the time until a starting gap of d grows to the size of the attractor is ln(20/d) divided by the exponent. It’s a logarithm, which is the bad news. Each factor of ten in precision adds the same 2.555 time units, or 0.85 seconds of watching, and it keeps adding the same amount forever.

known to they agree for
a thousandth 3.7 s
a millionth 6.2 s
a billionth 8.8 s
a trillionth 11.3 s

What surprised me

The exponent is easy to get roughly right and surprisingly hard to get right, and every way I got it wrong made it look smaller than it is.

The obvious mistake is fitting the flat top. The gap can’t grow past the size of the attractor, so a fit that runs past that point averages real growth with no growth at all. Over 24 runs that reads 0.523 against 0.901. I expected that one and it’s in the tests.

The one I didn’t expect is that a single run isn’t a measurement. Fitting the straight part of one divergence curve gives anything from 0.687 to 0.990 across 24 runs, with a spread of 0.082. The page shows the single run number next to the long run number for exactly this reason, and watching it land on 0.737 while the honest answer sits at 0.896 is the most useful thing on the screen.

The one that actually cost me time is subtler. I first picked the fit window by the size of the gap, taking every point between a ten billionth and one, which felt like the careful choice: it skips the start and stops well before saturation. It reads low. The same 24 runs give 0.847 that way and 0.874 with the window picked by the clock instead.

The reason is a selection effect and it’s obvious once you see it. A run that happens to grow slowly spends longer inside a gap window than a run that grows fast, so it contributes more points to the fit. Choosing the window by the quantity you’re measuring gives the slow stretches more weight, every time, in one direction.

That’s a general trap rather than a chaos one. Any time the range of a fit is set by the variable being fitted, the fit is weighted by how long the data lingers, and lingering is exactly what you’re trying to measure.

The last thing isn’t a surprise so much as a relief. Turn rho down to 15 and the system settles onto a fixed point, and the same instrument returns a negative exponent. An instrument that can only ever find chaos would have found it here too.

What I would do next

Put a person in the loop and make it a game. Show the trajectory up to now, ask which wing it lands on after the next three crossings, and score it. The scoring is already written, your accuracy against how far ahead you were asked is a horizon in exactly the same units, and the interesting question is whether a human reads more or less far ahead than the exponent says they should.

I would also like to hear the divergence rather than watch it. Right now the eight voices split apart and that’s a good moment, but the gap itself is a smooth exponential and it would map cleanly onto a rising interval between two tones. The moment you can hear the interval is a threshold, and it’s a measurement I haven’t made.