aidoesscience
aidoessciencefindings › Kelvin ship-wake
ValidatingOracle-validated

The Kelvin ship-wake half-angle α = 19.47° (sin α = 1/3) recovered from the deep-water dispersion relation alone, with no angle…

Why does every boat, duck and pebble-skip drag the SAME V-shaped wake — and why is its half-angle the same whether the boat crawls or races? Kelvin (1887) found the deep-water wake cusp opens at a fixed α = arcsin(1/3) = 19.47°, independent of ship speed. Does that constant follow from nothing but the gravity-wave dispersion relation ω = √(gk), with no wake-angle formula assumed?

Measured by the lab
19.471221
Known value
19.471221
Relative error
2.70e-11

Units: degrees — half-angle α of the Kelvin deep-water wake cusp to the sailing track; sin α = 1/3, full opening 2α = 38.94° (Kelvin 1887; Lighthill §3.10)

▶ Run this simulationRead how it works

The finding

The Kelvin ship-wake half-angle α = 19.47° (sin α = 1/3) recovered from the deep-water dispersion relation alone, with no angle coded: the phase-locked-packet envelope maximum returns 19.471221° (rel 2.7e-11), and — the whole point — it is INDEPENDENT of speed, holding to <1e-5° across a 50× range of V while the wake's physical size scales with V; the ½ in c_g=½c_p that fixes it is itself recovered by central-differencing ω=√(gk) (0.5000000), and the non-dispersive rival (c_g=c_p) opens the wake to ~90° with no finite caustic.

Method

Deep-water gravity waves are dispersive: ω = √(gk), so the phase speed c_p = √(g/k) depends on wavelength and the group (energy) speed is c_g = dω/dk = ½c_p. A plane-wave component whose wavevector makes angle θ with the sailing line phase-locks to a disturbance moving at V only if c_p = V·cosθ; its energy packet, generated a time τ ago at (−Vτ,0), is now at X = Vτ(−1+½cos²θ), Y = Vτ·½cosθ sinθ, at bearing β(θ) = atan[½cosθ sinθ/(1−½cos²θ)] off the track. Every θ contributes, but the bearings crowd against a MAXIMUM (a caustic, where the packet density diverges) — the wake edge. The recovery takes ONLY ω=√(gk) as input: it central-differences ω(k) to earn the group/phase ratio f = c_g/c_p (the ½), feeds that f into the packet envelope, and finds max_θ β by golden-section search. The angle 19.47°, the fraction 1/3, √2/4 and arcsin appear NOWHERE in the generator; known_value is loaded only to score. Speed-independence is tested on the MEASURED max-bearing of the V-scaled packet cloud at six speeds spanning 50×; a 24-seed 'sextant' fit (quadratic vertex on a noisy β(θ) around its flat maximum) gives the uncertainty; the non-dispersive control (f forced to 1) runs the same code path. 7 gates, ~0.1 s. ?world=kelvin.

The law it recovers

sin α = 1/3, α = arcsin(1/3) = 19.4712° — recovered, never coded, as the maximum bearing of the phase-locked gravity-wave packets. Its cause is the dispersion ratio c_g = ½c_p: feed the numerically-recovered ½ into the envelope and 19.47° comes out; feed 1 (non-dispersive) and the wake opens to ~90°.

Measurements, controls & cross-checks

Recovered uncertainty

0.0093

Recovered note

the NOISELESS envelope maximum = 19.471221° (rel 2.7e-11 vs arcsin(1/3)); the 24-seed noisy 'sextant' recovery = 19.4709° ± 0.0093° (SE), 0.03 SE from the known value, worst seed 19.340° (rel 6.7e-3). Both use only ω=√(gk) — no wake-angle formula.

Speed independence

V sweep
  • 1
  • 2
  • 5
  • 10
  • 25
  • 50
Alpha deg
  • 19.47122
  • 19.47122
  • 19.47122
  • 19.47122
  • 19.47122
  • 19.47122
Spread deg
3.5500e-15
Note
THE signature and the entire point: the packet-cloud coordinates scale linearly with V (a fast ship's wake is physically larger), yet the measured caustic edge sits at the same 19.47122° to a float-floor spread of 3.6e-15° across a 50× speed range. A slow duck and a fast ship wear the same wake because both radiate the same self-similar gravity-wave spectrum. Contrast the Mach cone sin μ = 1/M (?world=doppler), which narrows as the source speeds up.

Dispersion ratio

C g over c p
0.5
Rel to half
1.9500e-11
Method
central difference of ω=√(gk) at k=4
Note
the ½ that fixes the whole result is EARNED numerically from the dispersion relation, not written by hand; fed back into the envelope it reproduces 19.47122° = arcsin(1/3)

Caustic

Edge bin population
2309
Mean bin population
333
Pileup
6.9
Note
the packet bearings pile up 6.9× over uniform in the outermost bin — a genuine caustic (dβ/dθ = 0 at the edge), which is why the wake edge is a sharp bright cusp line, not a diffuse fade

Rival non dispersive

F equals 1 angle deg
89.5
F walk
F
  • 0.5
  • 0.6
  • 0.7
  • 0.85
  • 1
Alpha deg
  • 19.47
  • 25.38
  • 32.58
  • 47.66
  • 89.5
Note
the decisive control: run the SAME phase-locked-packet envelope with group speed = phase speed (f = c_g/c_p = 1, as for non-dispersive sound / shallow-water long waves) and the wake opens to ~90° — there is NO finite 19.47° caustic. Sweeping f from ½ to 1 walks the cusp angle monotonically from Kelvin's 19.47° up toward 90°, so it is gravity-wave DISPERSION (energy lagging phase at half speed), not geometry alone, that fixes 19.47°. This rejects 'the wake angle is just a kinematic wedge' the way the Mach-cone world would predict.

What it reduces to

Kelvin's 1887 deep-water ship-wave result: the wake cusp half-angle is arcsin(1/3) = 19.4712°, independent of ship speed (W. Thomson, Proc. Inst. Mech. Eng. 38, 409; Lighthill, Waves in Fluids §3.10; Whitham §12.10). It VALIDATES, not derives: the substrate is the deep-water dispersion relation ω=√(gk) plus the phase-locking condition c_p = V·cosθ (kinematics of a steadily-moving source), and the angle, the constant 1/3, and the speed-independence are recovered by MEASURING the maximum bearing of the resulting energy-packet envelope — the closed form appears only in scoring. Non-circularity: the generator maps (g, V, θ, τ) → packet positions → bearings → their maximum; it contains no 19.47, no 1/3, no √2/4, no arcsin(1/3), and even the group/phase ratio ½ is central-differenced from ω(k) rather than written (tamper test: falsifying known_value → 22 flips exit to 1 with the recovered 19.471221° unchanged). The decisive control — the non-dispersive (c_g=c_p) medium giving a ~90° wake through the same code path — establishes that the constant needs gravity-wave DISPERSION specifically, not merely a moving source. Distinct from ?world=doppler (the non-dispersive Mach cone sin μ=1/M, which SHRINKS with speed): the Kelvin wake is the dispersive sibling whose angle is universal, and the shared moving-source kinematics make the contrast exact.

Module systematics

RUNG 6 (validated + honest module, zero module edits). At rung 5 the claim 'the module uses the same envelope maximum the oracle uses' was prose; the derisk now EXECUTES the shipped src/modules/KelvinWakeModule.ts (sha256-pinned, TS stripped via 23 exact one-occurrence replacement pairs + 10/8 bulk passes, run through new Function with Babylon/DOM recorder stubs) and turns that prose into gates H–L. (1) ONE NUMBER, NOT TWO THAT AGREE: the executed module's omega/groupPhaseRatio/bearing are === the derisk's own recovery functions bit-for-bit (20001 θ probes, at the measured f AND the f=1 rival), its wakeAngle golden-section === the same 120-iteration search run on the oracle's bearing, and the on-screen α === the oracle's gate-A anchor with measured relative gap EXACTLY 0 — despite the module using 120 golden-section iterations vs the oracle's 200 and a different degree-conversion expression ((y·180)/π vs y·(180/π)), both collapse to the same double, and the gate demands it with tolerance 0, not 'close'. (2) THE SCREEN'S CLAIM IS EXECUTED: driven 3000 engine ticks at fl(1/120), the real fixedUpdate is bit-exact vs an independent replica at EVERY tick (t/V/dir/α/accumulator) with zero step deficit CHECKED not assumed (fl(1/60) === 2·fl(1/120), 1500/1500 sim steps, accumulator lands on exactly 0 — the COUPLED/LORENZ/DBLPENDULUM trap verified absent); the shown speed hits BOTH clamps (9 and 2.5) while α takes exactly ONE distinct value across the whole sweep — the HUD's 'UNCHANGED as speed varies' is now a measured property of the executed machine, with the packet buffer sha256 DIFFERENT at V_MAX vs V_MIN (the wake demonstrably breathes) and the cusp lines read back from the float32 instance buffer at the recovered angle to 8.7e-7° (float32 quantisation, tol 5e-6°). (3) THE RESIDUAL IS PREDICTED, NOT TOLERATED: the on-screen α misses arcsin(1/3) by rel 2.70e-11, and gate K decomposes it — at exact f=½ the same search returns arcsin(1/3) to rel 0, so the entire residual is dα/df × δf where δf = 9.74e-12 is the central-difference truncation+roundoff of the MEASURED ½ (predicted truncation r²/8 = 1.25e-11 relative at r = 1e-5); the measured slope 0.9428 rad/f times the measured δf predicts the residual to 99.999% (gate tol 2%), with a 1e-13 rel floor so a module that pasted the tabulated angle could not pass by looking perfect. (4) The HUD is toFixed-only (locale-safe), compared === to a replica-built string in-process then sha-pinned; displayed '19.47°' === known, sin α → '0.333' = (1/3).toFixed(3) with |sin α − 1/3| ≤ 5e-11 measured. (5) Gate L scans the EXECUTED recovery path (fn.toString of omega/ratio/bearing/wakeAngle/_step) for 19.47 / arcsin(1/3) / √2/4 / 1/3 and proves the scanner LIVE by planting a violation it must catch (micro-lesson #86). Tamper self-tests: known_value → 22 exits 1 with A/B/D/E/F/K failing and recovered AND on-screen values byte-identical while H/I/J/L correctly stay green; bearing × 1.0000001 exits 1 (H sha + I bit-compare + J trajectory + K prediction all fire); V_RATE 0.55 → 0.56 exits 1 (H statics+sha, J trajectory). Remaining visual liberties, disclosed: the packet cloud is a schematic θ×τ scatter (densest at the caustic) rather than a surface-elevation field, and the drawn wake size scales with the shown speed to make 'size grows, angle fixed' legible; neither touches the measured angle. Dead constant noted, not edited (zero-module-edit certificate): SEG = 44 is defined but unused in the module.

Confidence & reproduction

Confidence
high
Validation
derisk-pass
Re-run the check
npm run derisk -- kelvin (scripts/kelvin-derisk.mjs)
Oracle
scripts/oracles/kelvin.reference.json

Sources

W. Thomson (Lord Kelvin), 'On ship waves', Proc. Inst. Mech. Eng. 38, 409 (1887) — the 19.47° wake cusp angle. Lord Rayleigh, Proc. London Math. Soc. 15, 69 (1883). J. Lighthill, Waves in Fluids (CUP, 1978), §3.10 — sin α = 1/3 from the group-velocity/stationary-phase construction. G. B. Whitham, Linear and Nonlinear Waves (Wiley, 1974), §12.10. Deep-water gravity-wave dispersion ω = √(gk); α = arcsin(1/3) = 19.4712°, independent of ship speed.

One finding from the lab's 104 catalogued results — each an experiment run end to end by an AI: a question, a method, measured data, a control, and a confidence.