A bump built from many plane waves
A free quantum particle is never really a point. The simulation on this site starts it as a Gaussian wave packet — a localized bump in the wavefunction ψ(x,t) formed by superposing plane waves e^{ikx} over a narrow band of wavenumbers centred on k0, each weighted by a Gaussian envelope. At t = 0 the packet has width σ0 and carries momentum p0 = ħk0:
ψ(x,0) = (2πσ0²)^(-1/4) · exp(-(x-x0)²/4σ0²) · exp(ik0x)
Because it is built from a spread of wavenumbers rather than one exact k, the particle does not have one exact momentum either — it has a spread Δp set by how narrow the band of k-values is. That spread is the seed of everything interesting that follows.
Group velocity and phase velocity
Two speeds matter and they are not the same. The individual ripples inside the envelope move at the phase velocity vp = ω/k; the envelope itself — the thing you would actually see as "the particle" — moves at the group velocity vg = dω/dk. For a free non-relativistic particle the dispersion relation is ω = ħk²/2m, so vg = ħk0/m (exactly the classical velocity p0/m) while vp = ħk0/2m — only half as fast. Watching the demo, the ripples inside the packet visibly slide backward relative to the envelope; that mismatch is vp ≠ vg made visible.
Why the packet spreads
Each plane-wave component e^{ikx} picks up a different phase rate ħk²/2m, because the free-particle dispersion relation is quadratic in k, not linear. Components with larger k race ahead of components with smaller k, and the envelope — initially a tight sum of nearly-in-phase waves — gradually falls out of step with itself. The width grows in a closed form:
σ(t) = σ0 · sqrt(1 + (ħt / 2mσ0²)²)
Narrower packets spread faster: squeezing σ0 down to pin the position tighter widens the initial momentum spread Δp = ħ/2σ0, and a wider Δp means the k-components race apart faster. There is no way to have a wave packet that is simultaneously narrow and slow to spread — that trade-off is not an engineering limitation, it is Heisenberg's principle in disguise.
Heisenberg's uncertainty relation, measured live
For any quantum state, Δx·Δp ≥ ħ/2. A Gaussian wave packet is special: at t = 0 it saturates the bound exactly, Δx0·Δp = ħ/2 — the most localized state quantum mechanics allows for a given momentum spread. For a free particle the momentum distribution never changes (there is no potential to push on it), so Δp is constant for all time, while Δx(t) grows via the σ(t) formula above. The product Δx(t)·Δp therefore only ever increases after t = 0: the packet is minimum-uncertainty for one instant and then drifts away from that limit as it spreads.
Solving it on a grid
The simulation advances ψ with the split-step Fourier method: transform to momentum space with an FFT, multiply by the free-particle propagator exp(-iħk²dt/2m) — which is exact and unconditionally stable because it is diagonal in k — then transform back. One step looks like this:
phi = fft(psi) phi *= exp(-1i * hbar * k*k * dt / (2*m)) // exact free propagation psi = ifft(phi) // |psi|^2 is the probability density
This is far more accurate per step than a naive finite-difference update of the Schrödinger equation, because it treats the dispersive term exactly instead of approximating a second spatial derivative — the only error left is from the finite grid spacing and the periodic boundary the FFT implies.
Frequently asked questions
Why does the wave packet spread out over time?
Because its plane-wave components travel at different phase speeds — the free-particle dispersion relation ω = hbar k^2 / 2m is quadratic in k, so faster (larger-k) components outrun slower ones and the envelope loses coherence. A single exact plane wave (zero momentum spread) would never spread, but it also would not be localized anywhere.
Is the group velocity the particle's real velocity?
Yes — the group velocity hbar k0/m matches the classical momentum-over-mass velocity p0/m, and it is what you should track as "where the particle is going." The phase velocity, half that value here, describes the ripples inside the envelope and has no classical counterpart to compare it to.
Does the uncertainty principle mean we cannot know the particle's position?
It means position and momentum cannot both be made arbitrarily precise for the same state, not that either is unknowable. A Gaussian packet lets you dial the trade-off: shrink sigma0 to know position better, at the cost of a wider momentum spread and a packet that disperses faster.
Try it live
Everything above runs in your browser — open Quantum Wave Packet and change the parameters while it is running. Nothing is installed, nothing is uploaded, the whole model lives in one tab.
▶ Open Quantum Wave Packet simulation