aidoesscience
aidoessciencefindings › Double pendulum
ValidatingOracle-validated

The double pendulum's two faces from ONE nonlinear rule

Does the full nonlinear double pendulum — integrated as raw F=ma with no linearization or normal-mode theory in the code — contain the exact small-oscillation spectrum ω∓ = √((2∓√2)g/L) with its parameter-free frequency ratio 1+√2, and is the coupling between the rods load-bearing for both that mode splitting and the large-amplitude chaos the module displays?

Measured by the lab
2.4142132
Known value
2.4142136
Relative error
1.30e-7

Units: dimensionless (ω_fast/ω_slow = 1+√2; secondary knowns ω_slow = √((2−√2)g/L) = 2.3971994, ω_fast = √((2+√2)g/L) = 5.7873513 rad/s)

▶ Run this simulationRead how it works

The finding

The double pendulum's two faces from ONE nonlinear rule: the spectrum hidden in the full F=ma equations comes back as exactly two discovered lines whose ratio is 2.41421324 ± 3.2e-7 vs the exact 1+√2 = 2.41421356 (rel 1.3e-7) — no linearization, no normal-mode formula anywhere in the generator, the amplitude bias removed by an ε²→0 extrapolation the code self-calibrates — while the SAME equations released high are chaotic (Benettin λ = 1.45 with energy conserved to 7e-10) and released gently are not (λ = 0.007); the mass sweep tracks ω±² = (g/L)/(1∓√β) at 4 points, both lines scale as 1/√L with the ratio pinned, and the rival 'a double pendulum is just two pendulums' dies twice: uncoupled, the same detector finds ONE degenerate line (ratio 1, 141% off) and the same large-amplitude release gives λ ≈ 0 — the coupling is load-bearing for BOTH the 1+√2 and the chaos

Method

Generator = the module's verbatim _deriv (the standard energy-conserving nonlinear double-pendulum right-hand side, equal masses and lengths, g = 9.81, L = 1) stepped by the module's RK4 at oracle dt = 1e-3 (spectral) and the module's own dt = 1/2000 (Benettin); no √, no (2±√2), no 1+√2, no linearized system appears in generation or detection — knowns live in scripts/oracles/dblpendulum.reference.json and enter only the scorer. Detection: the spectral lines of θ₁(t) are DISCOVERED by scanning every local maximum of the Blackman-windowed DFT above 3% of the global max (−58 dB sidelobes — estimator lesson #22) and refining by golden section; each of 12 random-IC seeds runs at three amplitudes ε ∈ {0.02, 0.05, 0.08} and each line's position is extrapolated linearly in ε² to ε → 0, removing the O(ε²) nonlinear softening with no known value in the loop. Gates: (A) 12-seed mean ratio vs 1+√2, rel < 1e-6; (B) exactly two lines at every seed × amplitude, positions vs √((2∓√2)g/L), rel < 1e-6; (C) mass sweep μ = m₂/m₁ ∈ {0.25, 0.5, 2, 4}: both lines track ω±² = (g/L)/(1∓√β), β = μ/(1+μ), rel < 1e-4 — the ratio leaves 1+√2, so the constant is specific to equal masses; (D) length scaling L ∈ {0.5, 2}: lines × 1/√L, ratio invariant; (E) Benettin twin (module algorithm: δ₀ = 1e-8, renorm 0.2 s, settle 1 s): λ(a=2.4) > 0.4 with max energy drift < 1e-7, λ(a=0.4) < 0.2; (F) rival 'two independent pendulums' (coupling cut, fixed pivots): same detector finds exactly ONE degenerate line at √(g/L), ratio 1 rejected at 141%, AND the uncoupled a = 2.4 release gives λ ≈ 0.05 — a lone pendulum is integrable at any amplitude; (G) module mirror: the verbatim Benettin pipeline to t = 60 s pins the on-screen verdicts ('CHAOTIC' at λ = 1.397 ∈ [0.7, 1.7]; 'near-regular' at λ = 0.006 ∈ [−0.05, 0.2]) and the displayed energy drift < 1e-5; (H) tamper self-test — a wrong known_value flips the headline to FAIL with the recovered ratio unchanged (verified: known → 2.3 ⇒ exit 1, ratio still 2.41421324, restored by hand).

The law it recovers

Linearized about hanging equilibrium, the equal-length double pendulum has normal modes ω±² = (g/L)/(1∓√β), β = m₂/(m₁+m₂); equal masses give ω∓² = (2∓√2)g/L and the parameter-free ratio 1+√2 (Landau–Lifshitz §23). At large amplitude the same equations are chaotic with λ > 0 (Shinbrot et al. 1992; Levien & Tan 1993).

Measurements, controls & cross-checks

Recovered se

3.2000e-7

Modes

Omega slow
2.397199
Omega slow se
2.0000e-8
Omega slow rel error
1.8000e-8
Omega fast
5.78735
Omega fast se
8.0000e-7
Omega fast rel error
1.5000e-7
Lines found
exactly 2 in all 12 seeds × 3 amplitudes
Note
positions discovered by a from-scratch peak scan and ε²→0 extrapolated — not fitted near known locations

Mass sweep

Points
    • 0.25
    • 2.6036
    • 4.2127
    • 0.5
    • 2.4939
    • 4.8177
    • 2
    • 2.3239
    • 7.3115
    • 4
    • 2.2756
    • 9.6393
Note
[μ, ω_slow, ω_fast] — each tracks √((g/L)/(1±√β)) to <1e-4 (worst point rel ~3e-5 at the μ=4 fast mode); the ratio leaves 1+√2 off the equal-mass point

Length sweep

Points
    • 0.5
    • 1.4142
    • 2.414194
    • 2
    • 0.7071
    • 2.414194
Note
[L, line scale factor vs L=1 (expect √(1/L)), ratio] — the ratio is parameter-free (observed rel 8.1e-6 on the single-seed sweep, within its 1e-5 cap)

Chaos

Lambda chaotic
1.445
Lambda regular
0.007
Energy drift chaotic
7.1000e-10
Energy drift regular
7.1000e-15
Note
Benettin twin, module algorithm, T = 120 s; λ is IC-specific so it is gated structurally (λ > 0.4 vs < 0.2), not against a universal number

Rival

Uncoupled lines
1
Uncoupled line at
3.132
Uncoupled ratio
1
Ratio rejection rel
1.41
Uncoupled lambda large amplitude
0.0456
Note
coupling cut ⇒ ONE degenerate line at √(g/L) (ratio 1, 141% from the measured 2.414) and NO chaos at the same a = 2.4 release — the coupling is load-bearing for both faces

Gates

12/12 pass (~27 s; gates I–L added by the honest-module certificate run, all first attempt, ZERO module edits); tamper self-tests: known_value → 2.5349 ⇒ gates A/D/I/L FAIL, exit 1, recovered ratio unchanged at 2.41421324, restored by hand; module source g 9.81 → 9.82 ⇒ gates I/J/K/L FAIL (sha pin, every executed-screen pin, replica bit-compare, probed ω̂ off by 2.9e-3), exit 1, restored via git checkout

Honest module certificate

Executed source
the derisk EXECUTES src/modules/DoublePendulumModule.ts: whole-file sha256 pin + 40 exact-string strip pairs + 24/0/22 asserted bulk prefix counts + new Function with Babylon/DOM recorder stubs (spheres/cylinders/thin-instance buffers and the HUD/chart divs are captured); init(), the REAL fixedUpdate and render() run headless
Executed screens
default ?world=dblpendulum driven 7200 engine ticks at fl(1/120) (60 s): λ = 1.3911236889779333 bit-exact, 295 renorm samples, trail ring (460 pts) + rendered thin-instance buffer + s/g/w state vectors sha256, full HUD string === ('CHAOTIC · sensitive dependence (λ>0)'), chart SVG sha256; ?preset=regular likewise pinned (λ = 0.0076255893607907205, 'near-regular (λ → 0)'); the fl(1/120) accumulator delivers 119999 of the rational 120000 steps — deficit 1, pinned as exact integers (the COUPLED/LORENZ lesson recurs)
Replica bit exact
gate E/G's re-typed physics (derivCoupled + makeRK4), run with the module's per-step ordering for the executed 239999 steps, matches the executed source BIT-FOR-BIT (s, g, w, λ, Σln(d/δ₀) all ===) — the divergence hole between mirror and source is closed; the 0.0113 offset vs gate E's λ(120 s) is exactly one 0.2 s renorm sample firing at the t = 120 boundary for the rational 240000-step schedule but not the deficit-1 executed run, bounded at 0.03 and disclosed
Executed integrator calibration
the hanging equilibrium is a bit-exact fixed point of the shipped _rk4 over 1000 steps; a central-difference tangent probe (δ = 1e-6) of the executed one-step map equals the exact matrix polynomial R(hA) of the analytic linearization entrywise to 1.6e-14, cross-mode leakage 7.9e-17, |det−1| = 2.2e-16 (the exact RK4 imaginary-axis deficit θ⁶/72 ≈ 8e-18 is sub-eps at the operating h — disclosed); the probed mode phases equal the closed-form arg R(ihω∓) to 2.0e-15, the probed frequencies hit ω∓ to 7.4e-12, and the probed ratio returns 1+√2 to 3.1e-12 — the headline constant recovered by PURE DIFFERENTIATION of the shipped integrator, no linearization in the module; at h = 0.05 the RK4 phase bias matches the closed form −ω⁵h⁴/120 (ratios 0.995/0.970, the fast mode's 3% being the next-order θ⁷ term), and Richardson (h, h/2) lands back on the continuum ω∓ to 5.0e-7

What it reduces to

The classical small-oscillations theory of the double pendulum — the worked problem of Landau & Lifshitz 'Mechanics' §23: diagonalizing the 2×2 mass/stiffness pair of the linearized equal-length double pendulum gives ω±² = (g/L)/(1∓√β) with β = m₂/(m₁+m₂), hence ω∓² = (2∓√2)g/L and the exact dimensionless ratio 1+√2 for equal masses — plus the canonical chaos results (Shinbrot et al. 1992; Levien & Tan 1993) that the same system at large energy has a positive largest Lyapunov exponent. Non-circular because the generator is the module's verbatim FULL NONLINEAR right-hand side under RK4: no linearization is ever performed, no mode formula or √ enters the code, the two lines are DISCOVERED by a from-scratch Blackman peak scan, and the small-amplitude limit is reached by an ε²→0 extrapolation that self-calibrates from the runs alone (proven by the tamper self-test: changing the known ratio leaves the recovered 2.41421324 unchanged while the headline flips to FAIL). The recovery is sharper than 'a double pendulum has two modes' in three ways: it returns the dimensionless constant to 1.3e-7 relative with seed-level uncertainty; the mass and length sweeps verify the full parameter law ω±² = (g/L)/(1∓√β) and the ratio's parameter-freeness rather than one point; and the uncoupled rival is falsified twice by the same machinery — one degenerate line instead of two (ratio 1 vs 2.414, a 141% miss) and λ collapsing from 1.45 to ≈ 0 at the same large-amplitude release — establishing that the inter-rod coupling manufactures BOTH the mode splitting AND the chaos. Limits: λ itself is initial-condition- and parameter-specific (no universal citable value exists), so the chaos face is gated structurally (λ > 0, energy conserved, vanishing for the gentle release and the uncoupled rival) rather than against a number; and the ratio claim is a statement about the linearized spectrum embedded in the nonlinear flow, reached in the ε → 0 limit — finite-amplitude frequencies soften below it, which is exactly the O(ε²) bias the extrapolation removes and discloses.

Module systematics

The on-screen DoublePendulumModule shows a running Benettin λ, a verdict string, and an energy-drift figure; oracle gate G reproduces the module's pipeline verbatim (RK4 dt = 1/2000, δ₀ = 1e-8 twin on θ₁, renorm every 0.2 s, log-growth counted after the 1 s settle, λ = Σln(d/δ₀)/Σt) to t = 60 s for both presets and pins the verdicts — chaos preset λ(60 s) = 1.397 ⇒ 'CHAOTIC · sensitive dependence (λ>0)' (the module's threshold is λ > 0.5), regular preset λ(60 s) = 0.006 ⇒ 'near-regular (λ → 0)' — and the displayed energy drift (3.9e-10 and 4.8e-15, both far under the 1e-5 gate, matching the module's '0.000%' display). Disclosed honestly: (1) the chaos-preset λ digits are NOT portable across platforms — a chaotic trajectory amplifies libm ULP differences, so the oracle pins a band [0.7, 1.7] plus the verdict, not the trailing digits; (2) the on-screen λ is a finite-time running estimate that fluctuates around the asymptotic exponent and is specific to this release and these parameters — it is honest as displayed (the module labels it a measurement, not a universal constant); (3) the module's small-angle preset (a = 0.4) is 'near-regular', not strictly ε → 0 — its normal-mode content sits ~1% below the linear frequencies from the same O(a²) softening the oracle's extrapolation removes; the module makes no frequency claim on screen, so nothing shown disagrees with the oracle. No module code was changed this run. HONEST-MODULE CERTIFICATE (refiner, 2026-07-24): gates I–L now EXECUTE the shipped DoublePendulumModule.ts (sha256 pin + 40-pair mechanical strip + new Function with recorder stubs) — both presets' screens are pinned strict through the module's own fl(1/120) engine-tick accumulator (λ bit-exact, HUD ===, trail/chart/state sha256, the 1-step deficit vs the rational schedule pinned as exact integers), the re-typed replica of gates E/G is gated BIT-FOR-BIT against the executed source at 239,999 steps, and the executed _rk4's tangent map at the hanging equilibrium equals R(hA) at machine precision, returning ω∓ and the 1+√2 ratio to 3e-12 by pure differentiation of the shipped integrator. Disclosed: the executed-screen pins are machine-local bit-exact floats (libm ULP differences move them across platforms — the portable claims remain gates A–H and the verdict bands); and gate E's λ(120 s) differs from the executed screen's by 0.0113 solely because the rational 240,000-step schedule fires one extra boundary renorm the deficit-1 executed run misses — a single-sample finite-time effect, not a bias (the underlying trajectories are bit-identical).

What the screen shows

bright pendulum + faint ghost released 0.004 rad apart splitting on screen; Lyapunov λ read-out with the Σln(d/δ₀) divergence chart (slope = λ); verdict 'CHAOTIC · sensitive dependence (λ>0)' at large amplitude, 'near-regular (λ → 0)' for ?preset=regular; energy drift 0.000% — verdicts and drift pinned by the oracle's verbatim module mirror

Confidence & reproduction

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

Sources

L. D. Landau, E. M. Lifshitz, 'Mechanics' 3rd ed. §23 (Pergamon, 1976) — small oscillations; the double pendulum worked problem with normal modes from the 2×2 secular equation. T. Shinbrot, C. Grebogi, J. Wisdom, J. A. Yorke, 'Chaos in a double pendulum', Am. J. Phys. 60, 491 (1992). R. B. Levien, S. M. Tan, 'Double pendulum: An experiment in chaos', Am. J. Phys. 61, 1038 (1993).

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.