CotM
← archive

A superposition is not a morph

Physicspost2026-07-21

For fifteen years the harmonic-oscillator demo on this site animated a superposition as cos t·ψ_A + sin t·ψ_B and called it time evolution. It was not — and the conviction doesn't even need the Rabi oscillation it happens to resemble: a real wavefunction carries identically zero probability current, so the morphing density was teleporting. The original animation, preserved as the bug it was, with the Born flow that convicts it.

Here is a confession. The harmonic oscillator demo on this site has, since 2011, animated a superposition of two eigenstates as

Ψ(t)=costψA+sintψB,\Psi(t) = \cos t \cdot \psi_A + \sin t \cdot \psi_B,

The 2011 superposition render: two lobe systems blended into one symmetric cloud
The 2011 render that ran on this page for fifteen years — a superposition drawn as a morph.

the cloud morphing smoothly from the shape of A into the shape of B and back, probability visibly flowing in one direction and then the other. The caption said this is “the way a real quantum state evolves in time.” It is not. The animation is still there — it is now the demo’s Classic mode, preserved as the bug it was — and this article is its autopsy. There are three independent things wrong with it, and the kindest of them is that it accidentally implements somebody else’s physics.

Exhibit A: it is not free evolution

Eigenstates of a time-independent Hamiltonian H^0\hat{H}_0 evolve by a phase and nothing else. A superposition of two of them does

Ψ(t)=aeiEAt/ψA+beiEBt/ψB,\Psi(t) = a\,e^{-iE_A t/\hbar}\,\psi_A + b\,e^{-iE_B t/\hbar}\,\psi_B,

and the weights a2|a|^2, b2|b|^2 are fixed forever. The only thing time does is wind the relative phase at the beat frequency ω=(EBEA)/\omega = (E_B - E_A)/\hbar. The density is

Ψ(t)2=a2ψA2+b2ψB2+2abψAψBcos(ωt),|\Psi(t)|^2 = |a|^2\psi_A^2 + |b|^2\psi_B^2 + 2ab\,\psi_A\psi_B\cos(\omega t),

so the only thing that moves is the interference term, and it sloshes: back and forth, at the energy difference, with zero net transport anywhere. Wobbly blobs, not morphing blobs. An animation whose weights cycle, as mine did, is not integrating this equation — full stop.

There is a diagnostic I should have run in 2011, and it costs nothing. The 3D oscillator’s energy depends only on N=nx+ny+nzN = n_x + n_y + n_z, so states like (2,0,0)(2,0,0) and (1,1,0)(1,1,0) are degenerate. A superposition of degenerate eigenstates is a stationary state: EA=EBE_A = E_B means the relative phase never winds, the interference term is frozen, and the cloud must stand perfectly still. The old animation happily morphed those too. That is not a subtle violation; it is the animation announcing that whatever it was integrating, it was not the free Schrödinger equation.

Everything in this section fits on one line of a plot. The widget below is the same superposition in one dimension — pick any A and B, flip between the 2011 morph and honest free evolution, and watch the current strip underneath: in free mode the amber arrows carry the slosh back and forth, and the live continuity residual sits at round-off; in classic mode the arrows vanish identically while the density keeps moving. Set A and B to the same nn in free mode and the whole frame freezes, as stationarity demands.

ω = 1: fixed weights, the current carries the slosh, ∂tρ + ∂xj ≈ 0.

Exhibit B: the current is zero

Here is the verdict that needs no comparison with anything. The 2011 state is, at every instant, a real-valued wavefunction — real coefficients times real Hermite–Gaussian eigenfunctions. And for a real wavefunction the probability current vanishes identically:

j=mIm(ΨΨ)=2m(Ψ2)  is real, so  Im(ΨΨ)0.\mathbf{j} = \frac{\hbar}{m}\,\operatorname{Im}\big(\Psi^*\nabla\Psi\big) = \frac{\hbar}{2m}\,\nabla\big(\Psi^2\big)\ \ \text{is real, so}\ \ \operatorname{Im}\big(\Psi^*\nabla\Psi\big) \equiv 0.

But the density is manifestly changing — that is the whole point of the animation — so tρ0\partial_t\rho \neq 0 while j=0\nabla\cdot\mathbf{j} = 0. The continuity equation tρ+j=0\partial_t\rho + \nabla\cdot\mathbf{j} = 0 fails everywhere the morph is happening. Probability disappears from shape A and appears in shape B with no current transporting it: the density teleports. And since j/ρ\mathbf{j}/\rho is the velocity a weak momentum measurement returns — the only velocity the Bohmian trajectories of the point-cloud display can legitimately follow — the morph has no trajectories at all. The “direction of probability flow” I admired for fifteen years does not exist, not even as an approximation.

The demo now says this to your face. In Classic mode the current switch is on: it seeds a Born-distributed tracer ensemble and advects it by the true j/ρ\mathbf{j}/\rho of the displayed state — and the tracers stand perfectly still while the cloud morphs through them. The particles are the honest answer to “where does the flow go?”, and the answer is nowhere.

Exhibit C: even as Rabi oscillation, it was the wrong picture

The kind observation — I made it when I first understood the bug — is that cycling weights are not nonsense in themselves. A resonantly driven two-level system does exchange population between its levels: that is Rabi oscillation, and the amplitudes cos(Ωt/2)\cos(\Omega t/2), sin(Ωt/2)\sin(\Omega t/2) of the driven state are suspiciously familiar. The companion article derives this properly, drive term by drive term. But even this kindest reading does not acquit the animation, for two reasons.

First, the resemblance only holds in the interaction picture. The driven oscillator’s actual state is

Ψ(t)=cosΩt2eiEAt/ψA    ieiφsinΩt2eiEBt/ψB,\Psi(t) = \cos\tfrac{\Omega t}{2}\,e^{-iE_A t/\hbar}\psi_A \;-\; i\,e^{-i\varphi}\sin\tfrac{\Omega t}{2}\,e^{-iE_B t/\hbar}\psi_B,

with φ\varphi the phase of the drive. The interaction picture strips the fast phases eiEt/e^{-iEt/\hbar} to expose the slow population dynamics — it is a computational frame, not a rendering. The 2011 animation plotted those stripped amplitudes (with the drive-phase choice φ=π/2\varphi = \pi/2 that makes them real, at Rabi frequency Ω=2\Omega = 2) as if they were the wavefunction. The fast winding it discarded is not a bookkeeping detail: it is most of the physics, and its absence is exactly why Exhibit B’s current came out zero.

Second, the density gives it away. The true driven density keeps the interference term, sloshing at the optical frequency under the slow morph:

Ψ2=cos2Ωt2ψA2+sin2Ωt2ψB2    2cosΩt2sinΩt2ψAψBsin(ωDt+φ),|\Psi|^2 = \cos^2\tfrac{\Omega t}{2}\,\psi_A^2 + \sin^2\tfrac{\Omega t}{2}\,\psi_B^2 \;-\; 2\cos\tfrac{\Omega t}{2}\sin\tfrac{\Omega t}{2}\,\psi_A\psi_B\sin(\omega_D t + \varphi),

while the 2011 density, (costψA+sintψB)2(\cos t\,\psi_A + \sin t\,\psi_B)^2, carries a standing interference bulge that never sloshes. Compare like with like and the old animation doesn’t even show what a driven atom looks like: it freezes the one term that should be moving fastest. The demo’s Driven mode shows the interaction-picture density honestly labelled as such — a clean morph with the relative phase pinned at π/2-\pi/2 — and Classic shows the 2011 original, standing bulge and all. They are visibly different states, and only one of them was ever on this page before today.

What free evolution actually looks like

With the impostor named, the genuine article is worth a look on its own terms. In Free mode the demo runs Ψ=(ψA+eiωtψB)/2\Psi = (\psi_A + e^{-i\omega t}\psi_B)/\sqrt{2}: fixed weights, winding phase, the density sloshing through ψAψBcosωt\psi_A\psi_B\cos\omega t and never getting anywhere. Here the current switch is pure confirmation — the continuity equation tρ+(ρv)=0\partial_t\rho + \nabla\cdot(\rho\mathbf{v}) = 0 guarantees that an ensemble started from Ψ2|\Psi|^2 is Ψ(t)2|\Psi(t)|^2 at all later times (I checked the velocity field against the continuity equation numerically before trusting it), so the flowing tracers and the resampled cloud move as one. The slosh you see is the current carrying it. Flip the pair to a degenerate one and everything — cloud, current, tracers — stands still, as stationarity demands.

Play with it

interactive · Classic morph, free slosh, driven Rabi — and the current that convicts one of themopen ↗

Interactive demo: Classic morph, free slosh, driven Rabi — and the current that convicts one of them. Requires JavaScript to run — the source is at /interactive/3d-harmonic-oscillator-eigenfunctions-demo-1.html.

Start in Classic — the 2011 animation as it ran — and switch the current on: the tracers seed into the cloud and then refuse to follow it, the continuity violation made visible. Flip to Free with the current still on and the same ensemble sloshes with the cloud, never getting anywhere, exactly as much motion as a fixed-weight superposition is allowed. Driven is the honest Rabi morph, interaction picture labelled as such; its current story is subtler and gets its own article. Throughout, the probe and measure/run buttons collapse any of the three clouds onto a wandering point: weak measurement does not care which Hamiltonian — or non-Hamiltonian — is running.

The bug is fixed. The bug is also still there, in the first dropdown slot, labelled Classic — indicted by its own tracers, and more instructive than the correct animation ever was.