aidoesscience
aidoessciencefindings › Coupled pendulums
ValidatingOracle-validated

Two pendulums, one spring, and the textbook's cleanest prediction recovered from raw F=ma

Do two identical spring-coupled pendulums, integrated as raw F=ma with no normal-mode theory in the code, really beat at the mode splitting T = 2π/(ω_a−ω_s) with complete energy transfer — and is that transfer a genuine resonance that detuning destroys quantitatively as the classical Rabi (avoided-crossing) Lorentzian?

Measured by the lab
15.0597
Known value
15.059069
Relative error
3.90e-5

Units: seconds per beat (T_beat = 2π/(ω_a − ω_s); secondary knowns ω_s = √(g/L) = 2.4996815, ω_a = √(g/L+2c) = 2.9169175 rad/s)

▶ Run this simulationRead how it works

The finding

Two pendulums, one spring, and the textbook's cleanest prediction recovered from raw F=ma: the beat period comes back T = 15.0597 s vs 2π/(ω_a−ω_s) = 15.0591 s (rel 3.9e-5) with NO normal-mode formula anywhere in the generator — the two mode frequencies are DISCOVERED as spectral lines at 2.499682 ± 2.1e-7 and 2.916918 ± 5.2e-7 rad/s (√(g/L) and √(g/L+2c) to rel 1.3e-7 / 3.2e-7, exactly two lines in all 12 random-IC seeds), the energy envelope beats at the mode DIFFERENCE Δω (measured ratio to the Δω/2 mis-reading: 2.000), the carrier sits at the mode mean, identical pendulums transfer 99.9998% of the amplitude, the coupling sweep tracks √(ω₀²+2c)−ω₀ at 5 points to <5e-4, and detuning kills the transfer as the EXACT classical-Rabi Lorentzian 4c²/(4c²+Δ²) = 1 → 0.8 → 0.5 → 0.2 (all within 2e-3); rivals dead: the first-order weak-coupling splitting c/ω₀ misses the measurement by 7.7% (the √ is load-bearing) and with the spring removed θ₂ stays at machine zero forever; on-screen digits 15.07|2.71|2.50|2.92 pinned by a verbatim module-mirror emulation and scrape-verified in the real browser

Method

Generator = the module's verbatim velocity-Verlet _step on θ̈₁ = −ω₀²θ₁ − c(θ₁−θ₂) and symmetrically θ₂ (ω₀² = g/L = 9.81/1.57, c = 1.13, A0 = 0.21), at oracle dt = 1/1000 (Verlet frequency shift ω²dt²/24 ≈ 3.5e-7, far below every gate); no √(g/L), no mode splitting, no beat formula, no Lorentzian appears in generation or detection — knowns live in scripts/oracles/coupled.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 1% of the global max (−58 dB sidelobes, so leakage cannot masquerade as a line) and refining by golden section — the detector takes whatever lines exist and must find exactly two; the beat is timed from parabolic-refined troughs of the doubly-boxcar-smoothed pendulum-1 energy; the carrier from the MEDIAN zero-crossing interval (the module's estimator — the median is exactly π/ω̄ because envelope zeros only split a minority of intervals; a count-based mean would read ω_a instead, a real trap this oracle documents). Gates: (A) beat period vs 2π/(ω_a−ω_s), rel < 1e-3; (B) 12 random-IC seeds → exactly two lines each, positions mean ± SE vs √(g/L), √(g/L+2c), rel < 1e-4; (C) energy-envelope line at Δω (explicitly ≈ 2× the Δω/2 mis-reading) and carrier at the mode mean; (D) identical pendulums ⇒ max|θ₂|/A0 > 0.999 (exact in the linear theory) with max|θ₁| ≤ A0 (no energy created); (E) coupling sweep c = 0.4…2.0: splitting tracks √(ω₀²+2c)−ω₀ point by point, monotone; (F) Rabi control at c = 0.35: (max|θ₂|/A0)² vs the exact avoided-crossing Lorentzian 4c²/(4c²+Δ²) for Δ = 0, 0.35, 0.7, 1.4, abs < 2e-3; (G) rivals — first-order splitting c/ω₀ rejected at ≥5% distance while the exact law matches at 1.4e-6, and c = 0 ⇒ θ₂ ≡ 0 to machine precision; (H) module mirror — the module's verbatim pipeline (dt = 1/200, 464-sample energy moving average, 20 Hz trough detector, median-of-16 zero-crossing carrier) pins the banner's four measured digits to a single stable string over t ∈ [24, 36] s, independently scrape-verified in headless Chrome; (I) tamper self-test — a wrong known_value flips the headline to FAIL with the recovered beat unchanged.

The law it recovers

Two identical coupled pendulums have exactly two normal modes — in-phase at √(g/L) (the spring never stretches) and out-of-phase at √(g/L+2c) — and releasing one from rest excites an equal mix, transferring ALL the energy back and forth with beat period 2π/(ω_a−ω_s); detuning by Δ = ω₂²−ω₁² caps the amplitude transfer at sin²2φ = 4c²/(4c²+Δ²), the classical avoided-crossing/Rabi factor (French 1971 ch. 5; Feynman I-49; Landau–Lifshitz §23).

Measurements, controls & cross-checks

Modes

Omega s
2.499682
Omega s se
2.1000e-7
Omega s rel error
1.3000e-7
Omega a
2.916918
Omega a se
5.2000e-7
Omega a rel error
3.2000e-7
Lines found
exactly 2 in all 12 random-IC seeds
Note
positions discovered by a from-scratch peak scan, not fitted near known locations

Structure

Envelope line
0.41724
Known dw
0.417236
Ratio to half dw misreading
2
Carrier
2.7083
Known mode mean
2.7082995
Note
the energy envelope beats at the mode DIFFERENCE (energy is amplitude², doubling the envelope rate) — the 2π/(Δω/2) mis-reading is explicitly rejected

Transfer

Max theta2 over A0
0.999998
Max theta1 over A0
1
Note
complete amplitude transfer, exact in the linear theory; no energy created

Coupling sweep

Points
    • 0.4
    • 0.15519
    • 0.1552
    • 0.7
    • 0.2659
    • 0.26589
    • 1.13
    • 0.41724
    • 0.41724
    • 1.6
    • 0.57414
    • 0.57414
    • 2
    • 0.70163
    • 0.70163
Note
[c, measured splitting, √(ω₀²+2c)−ω₀] — all rel < 5e-4, monotone

Rabi

Points
    • 0
    • 1
    • 0.35
    • 0.8
    • 0.7
    • 0.5
    • 1.4
    • 0.2
Note
[Δ, (max|θ₂|/A0)²] each equal to 4c²/(4c²+Δ²) within 2e-3 at c = 0.35 — detuning kills resonance exactly as the avoided-crossing Lorentzian demands

Rival

First order splitting
0.4520576
Measured splitting
0.417237
Rejection rel
0.077
Exact match rel
1.4000e-6
No spring max theta2
0
Note
ω_a ≈ ω₀ + c/ω₀ (the weak-coupling Taylor law) misses by 7.7% at 2c/ω₀² = 0.36 — the square root is load-bearing; spring removed ⇒ θ₂ identically zero

Gates

9/9 pass in 4.1 s first gate run; tamper (known_value → 14.2) ⇒ headline FAIL, exit 1, recovered beat unchanged at 15.0597, restored by hand

What it reduces to

The normal-mode theory of two coupled oscillators — ω_s = √(g/L), ω_a = √(g/L+2c), complete resonant energy exchange with beat period 2π/(ω_a−ω_s) (A. P. French, 'Vibrations and Waves', 1971, ch. 5; Feynman Lectures I-49), plus the 2×2 mixing-angle result that detuning caps the transfer at sin²2φ = 4c²/(4c²+Δ²) (Landau–Lifshitz, 'Mechanics', §23) — the classical avoided-crossing form that reappears as Rabi oscillations in every two-level quantum system. Non-circular because the generator is bare velocity-Verlet on the coupled F=ma equations: the mode frequencies never enter the code and are DISCOVERED as spectral peaks by a scan that takes whatever local maxima exist (proven by the tamper self-test: change the known beat and the recovered value is unchanged while the headline flips to FAIL). The recovery is sharper than 'two pendulums beat' in three ways: it returns BOTH mode positions to ~2e-7 relative with seed-level uncertainty, it verifies the structural anatomy of the beat (envelope at Δω — explicitly rejecting the factor-2 mis-reading — carrier at the mode mean, 100% amplitude transfer), and it demonstrates the two laws' load-bearing parts quantitatively: the coupling sweep pins the √, whose first-order Taylor rival is rejected by 7.7% (55,000× the measurement's match to the exact law), and the detuning sweep reproduces the full Rabi Lorentzian 1 → 0.8 → 0.5 → 0.2, showing complete transfer is a resonance phenomenon, not a generic property of coupling. Limits: the module and oracle share the linear small-angle model (the two modes are exact for it; finite-amplitude pendulum corrections are outside this world's claim), and the amplitude-transfer ⇔ sin²2φ identity is exact for the amplitude ratio, which is what is measured — energy-fraction versions of the same statement carry O(Δω/ω̄) corrections this oracle deliberately avoids.

Module systematics

The on-screen CoupledPendulumModule measures with the SAME estimators the oracle gates, and the derisk now EXECUTES the shipped source rather than trusting a re-typed mirror: nine sha256-pinned slices of CoupledPendulumModule.ts (constants, getters, state fields, Float32Array energy-buffer init, fixedUpdate accumulator, velocity-Verlet _step, zero-crossing carrier detector, 20 Hz trough detector, HUD innerHTML arithmetic) are mechanically stripped (replacement counts asserted) and driven at the ENGINE's fl(1/120) tick through the module's own float accumulator for 10800 ticks = 90 s. The executed schedule is disclosed exactly: the accumulator fires 17999 substeps where the rational 5/3 schedule would fire 18000 (a real one-substep float deficit; substeps/tick ∈ {1,2}, residual < SIM_DT strictly, only 4 distinct residual floats), so the module clock reads _t = 89.995 s at 90 s of engine time. The 90 s executed state is pinned strict-=== (θ₁/θ₂/ω₁/ω₂/e1Avg/e2Avg/measuredBeat/measuredCarrier/runMax, all 5 beat intervals, all 6 trough times — a one-ULP pin edit exits 1), the full 1234-char HUD innerHTML is reproduced from the module's own render arithmetic, and the displayed 'theory 15.06s' is the oracle's known_value BIT-FOR-BIT (executed beatTheory === reference known). The displayed beat 15.07 s − theory 15.06 s decomposes with ZERO fitted parameters: probing the executed one-substep map gives discrete mode frequencies matching the closed form 2·asin(ωh/2)/h to 2.2e-13, whence Verlet splitting bias T_d − T = −3.459e-4 s, and every displayed beat interval === 3014 substeps exactly, putting the trough-detector quantization at +1.128e-2 s ∈ (0, 11h] (the detector samples every 10–11 substeps); the carrier's median half-period === 232 substeps with |ω̄−ω̄_d| = 5.1e-5 inside one-substep quantization. Richardson (h, h/2) on the module's OWN executed step returns ω_s → √(g/L), ω_a → √(g/L+2c) and T∞ → 2π/(ω_a−ω_s) to 1.9e-10 — the screen number, bias-stripped by the module's own machinery, IS the oracle's known. Exact-float symmetries: a twin released from the OTHER pendulum is a bit-exact 1↔2 mirror after every one of 10800 ticks (energy sums and both 464-slot Float32 ring buffers swapped to the ulp); the in-phase pair stays bit-identical to a SPRING-LESS (c=0) pendulum at every tick — the symmetric mode cannot see the spring, to the last ulp — and its beat clock NEVER fires (HUD shows '…s'), as does the c=0 rival's (θ₂ === 0 forever): the beat needs BOTH the spring and the asymmetric release. Total energy (including the spring term the bars omit) is bounded to 4.7e-5 over all 17999 substeps, matching the Verlet shadow-energy scale (ω_a h)²/4 = 5.3e-5. Earlier disclosed nuances stand: the energy-smoothing window and the 0.4·beatTheory trough guard come from theory constants but are a cosmetic width and a floor that cannot set the value; the per-pendulum energy bars ignore the spring's own potential ('averages out'). No module code was changed this run (zero-edit certificate).

What the screen shows

energy bars sloshing 100% left ↔ right with the beat; beat T 15.07 s / theory 15.06 s; carrier ω̄ 2.71 / 2.71; ω_s (in-phase) 2.50 / 2.50; ω_a (anti-phase) 2.92 / 2.92 — measured values reconstructed on-screen from the timed beat + zero-crossing carrier, not echoed from theory

Confidence & reproduction

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

Sources

A. P. French, 'Vibrations and Waves' (W. W. Norton, 1971), ch. 5 — coupled pendulums, normal modes, complete energy exchange, beat period 2π/(ω_a−ω_s); R. P. Feynman et al., 'The Feynman Lectures on Physics' Vol. I §49 (1964) — modes and beats; L. D. Landau, E. M. Lifshitz, 'Mechanics' 3rd ed. §23 (Pergamon, 1976) — normal coordinates and the 2×2 mixing angle tan 2φ = 2c/Δ behind the avoided-crossing transfer factor.

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.