The Rediscovery of Neptune

An executable reconstruction of Le Verrier’s 1846 prediction

This project turns Uranus’s 1781–1846 longitude anomalies into an inverse problem: find the unseen planet whose gravity explains the residuals.

Illustrative animated top-down view combining sourced ancient Uranus sightings with unsourced post-discovery geometry

An illustrative reconstruction combining sourced ancient sightings with unsourced post-discovery geometry. It is orientation, not a transcription of the entire historical record. See the provenance limits →

Start Here

If you want the shortest path, start with Tutorial: From Zero to Neptune. If you want the historical argument, read Foundations of Perturbation Theory and The Uranus Problem. If you want the computational details, open Notebook: Neptune Discovery.

Key Results

NoteSynthetic benchmark

The closed-world benchmark recovers the seeded Neptune exactly. This verifies the optimizer and forward-model plumbing, not historical realism.

TipJPL comparison

The simplified 4-parameter model leaves few-arcsecond, serially correlated residuals against modern JPL state-vector data inside the historical search domain. A broader domain improves the fit, so this is a domain-specific result rather than an irreducible model floor. The fitted longitude is compared to a JPL (diagnostic λ) reference — a diagnostic reference, not a rigorous angular error, because the model fixes the perihelion convention (ω = Ω = 0) and therefore absorbs part of the orbit geometry into the longitude fit. Residual-model diagnostics are needed before interpreting the remaining mismatch. The validation notebook labels whether a cached JPL posterior-predictive diagnostic was actually executed or skipped.

WarningMercury and Vulcan

The same inverse-problem logic fails for Mercury: general relativity supplies the missing 43 arcsec/century precession, not an unseen planet.

Reading Paths

Source and Reproducibility

The source is at github.com/jbwhit/discoverneptune. See Reproducibility and Artifacts for the notebook execution and output policy.