Dispersion occurs when phase evolution depends on wave number. A localized packet contains a range of wave-number components, so a component-dependent speed changes its internal alignment and can spread or reshape the packet over time. It is a property of the evolution rule, not a blur effect added after rendering.
omega(k). Sample that same function over the packet's wave-number bins, advance every component by omega(k) * Δt, and reconstruct the signal from those evolved phases. Keep physical material parameters separate from grid and time-step parameters so numerical dispersion cannot masquerade as material behavior.v_p follows a particular crest, while v_g estimates how the envelope of nearby components moves. They are equal for the nondispersive relation ω = vk; equality is a consequence of the relation, not a general rule for waves. For a deliberate test fixture, choose
When α = 0, both derived speeds are exactly v. When α ≠ 0, components near different k values advance at different rates. A component solver can use this analytic relation as an oracle: compare a finite-difference estimate of dω/dk with the known v + 3αk², and make the zero-curvature case a regression test.
This model samples ω(k) = vk + αk³. Change α and the packet's central wave number k; the curve and the two derived velocities update from the same relation.
At k = 2.0, ω = 2.80; phase velocity = 1.40; group velocity = 2.20. The unequal speeds indicate dispersion.
The explorer deliberately shows the relation before it shows a packet. This ordering matters: the curve is the model contract and any packet animation is downstream output. A spectral packet implementation stores an amplitude A(k) and applies a phase factor such as exp(-iω(k)t) before transforming back to position samples. A real-valued display may show one component of that reconstructed signal, but its width or apparent motion must be measured from data, not guessed from a moving line.
Prediction: Turning α from zero to a positive value makes group velocity increase with the central wave number and separates it from phase velocity.
Setv = 1, compare k = 1 and k = 3 at α = 0.1, and predict which component band reaches a fixed downstream location first. Then write the zero-curvature assertion and the finite-difference test for group velocity.Dispersion is component-dependent phase evolution. Treat ω(k) as executable input, derive phase and group speed from it, test the nondispersive limit, and use refinement to separate a physical packet change from a discretization artifact.
Treat the lesson as a small function before treating it as a fact to memorize. Give every value a unit, keep only the state needed for the next step, and make the output easy to inspect.
\[\text{observable output} = f(\text{inputs},\,\text{state})\]For Dispersion, write down the quantities you can control, the values your program must retain, and the result a reader could inspect. In Waves II — Analysis and Transformations, the useful program is not the drawing: it is the smallest explicit model that makes a prediction you can test.
Prediction: changing one declared input while holding the others fixed should change only the outputs that the model connects to that input. Choose one input, predict the direction of change, then check a limiting case such as zero, a symmetric arrangement, or a familiar low-speed or small-change approximation.
This lesson is a teaching model, not a complete simulator. Before using it outside the stated question, check which interactions, scales, uncertainties, boundary conditions, and measurement limits it leaves out.
Treat Dispersion as a contract: named inputs and units enter a rule, the rule produces an observable result, and a known limit or invariant checks whether the implementation deserves trust.
Evolve wave components from a dispersion function and distinguish physical spreading from grid artifacts.