Numerical Methods for PDEs: Finite Differences

numerical dispersion

In the true wave equation every wavelength travels at the same speed c, so a pulse made of many wavelengths holds its shape as it moves — a sharp blip stays a sharp blip. Many finite-difference schemes break this: they make different wavelengths travel at slightly different speeds, so the pulse's components drift apart and the once-clean shape develops a train of trailing ripples. That spurious wavelength-dependent speed is numerical dispersion — a scheme inventing dispersion that the equation does not have.

It is the PHASE of the amplification factor going wrong, the partner to dissipation's magnitude error. Write g = |g| * e^(i*phi(theta)); the phase phi tells you how far each Fourier mode advances per step, hence the numerical speed of that wavenumber. For the exact PDE the phase should correspond to the same speed c for all theta. In a real scheme the numerical speed depends on theta — typically the short wavelengths (high theta, near the sawtooth) lag behind and travel too slowly, so the fastest-varying parts of the solution fall behind, producing the characteristic oscillatory wake behind a sharp front. Even leapfrog, which has zero dissipation (|g| = 1), suffers dispersion: its phase is slightly wrong for poorly resolved modes.

The practical signature is unmistakable: a transported discontinuity or sharp gradient grows wiggles, especially short-wavelength ripples trailing behind it (Gibbs-like oscillations), even though no amplitude is lost. It is worst exactly where the grid barely resolves the feature — a few points per wavelength — and it improves as you refine the grid, since well-resolved long waves have near-correct phase. Honest takeaways: dispersion and dissipation are independent flaws (a scheme can have one without the other), high-order and spectral methods reduce dispersion dramatically, and a touch of dissipation is often deliberately added to damp the dispersive wiggles into something acceptable.

Advect a square wave with leapfrog at a Courant number below 1: the step stays the right height (no dissipation) but grows a train of short-wavelength ripples on its trailing side, because the sawtooth modes travel slower than the smooth ones. Refine the grid and the ripples shrink; add a small upwind dissipation and they get damped away.

Different wavelengths drift at different speeds — a clean front grows a wiggly wake.

Dispersion and dissipation are SEPARATE defects: dispersion is a phase (speed) error that mangles shape while preserving amplitude, dissipation is a magnitude error that drains amplitude. A non-dissipative scheme (leapfrog) can be badly dispersive, which is why purely energy-conserving schemes still produce oscillatory wakes near sharp features. More points per wavelength is the cure.

Also called
phase errornumerical wave-speed error相位誤差數值頻散