The Mercury Puzzle

Le Verrier’s Mercury anomaly, the Vulcan hypothesis, and the road to general relativity.
Author

Jonathan Whitmore

Published

April 9, 2026

The Same Method, a Different Outcome

Fresh from the triumph of Neptune, Le Verrier turned his perturbation methods to the entire solar system. By 1859, he had completed an exhaustive analysis of Mercury’s orbit and found something troubling: after accounting for every known planet’s gravitational pull, Mercury’s perihelion — the closest point to the Sun in its orbit — was advancing faster than it should.

The Anomalous Precession

Mercury’s perihelion precesses (rotates slowly around the Sun) due to gravitational tugs from Venus, Earth, and Jupiter. Le Verrier computed this classical precession and compared it to observations. The discrepancy was small but definite.

Code
from discoverneptune.historical_values import (
    LEVERRIER_MERCURY_1859,
    NEWCOMB_MERCURY_1882,
    MODERN_MERCURY_ANOMALY,
)

print("Mercury's anomalous perihelion precession — historical progression:")
print(f"  Le Verrier (1859):  {LEVERRIER_MERCURY_1859.anomaly_arcsec_per_century:.1f} arcsec/century")
print(f"  Newcomb (1882):     {NEWCOMB_MERCURY_1882.anomaly_arcsec_per_century:.2f} arcsec/century")
print(f"  Modern value:       {MODERN_MERCURY_ANOMALY.anomaly_arcsec_per_century:.2f} arcsec/century")
Mercury's anomalous perihelion precession — historical progression:
  Le Verrier (1859):  38.0 arcsec/century
  Newcomb (1882):     42.95 arcsec/century
  Modern value:       42.98 arcsec/century

Note that Le Verrier’s original 1859 value was 38 arcsec/century, not the familiar 43. He gives the figure himself, in his letter to Faye: “il a suffi d’augmenter de 38 secondes le mouvement séculaire du périhélie pour représenter toutes les observations des passages à moins d’une seconde près” — adding 38 arcseconds per century to the perihelion’s secular motion was enough to fit every transit observation to under a second of arc.

The familiar 43 came from Simon Newcomb’s refined analysis in 1882, using better observational data. The anomaly was real from the start; the precise number took decades to pin down.

Reproducing the Anomaly

We can reproduce this with a 500-year REBOUND integration. First, a Newtonian simulation (Sun + Mercury + Venus + Earth + Jupiter + Saturn), then the same system with general-relativistic corrections via reboundx.

Code
from pathlib import Path
import pandas as pd
from discoverneptune.mercury import (
    analytical_gr_precession,
    perihelion_precession_rates,
)
from discoverneptune.simulation import StateVector

# Load bundled J2000 state vectors for inner planets
from discoverneptune.data import find_bundled_data_dir

data_dir = find_bundled_data_dir()

inner_svs = pd.read_csv(data_dir / "inner_planet_state_vectors_j2000.csv")
inner_state = {
    row.planet: StateVector(row.x, row.y, row.z, row.vx, row.vy, row.vz)
    for row in inner_svs.itertuples(index=False)
}

mercury_sv = inner_state["mercury"]
venus_sv = inner_state["venus"]
earth_sv = inner_state["earth"]
jupiter_sv = inner_state["jupiter"]
saturn_sv = inner_state["saturn"]
Code
rates = perihelion_precession_rates(
    mercury_sv, venus_sv, earth_sv, jupiter_sv,
    saturn_sv=saturn_sv,
)

print(f"Newtonian precession rate:  {rates.newtonian_arcsec_per_century:.1f} arcsec/century")
print(f"GR-corrected rate:          {rates.gr_corrected_arcsec_per_century:.1f} arcsec/century")
print(f"GR contribution (sim):      {rates.gr_contribution_arcsec_per_century:.1f} arcsec/century")
print(f"GR contribution (formula):  {analytical_gr_precession():.1f} arcsec/century")
Newtonian precession rate:  524.7 arcsec/century
GR-corrected rate:          567.6 arcsec/century
GR contribution (sim):      43.0 arcsec/century
GR contribution (formula):  43.0 arcsec/century

The GR contribution matches Einstein’s textbook formula to within 0.1 arcsec/century. This is the anomaly Le Verrier found — but he didn’t know what caused it.

The Vulcan Hypothesis

Le Verrier’s method had worked brilliantly for Neptune: an unexplained orbital anomaly → predict a new planet → find it. He applied the same logic to Mercury and predicted an inner planet he called Vulcan, orbiting between Mercury and the Sun.

The search was serious and sustained. Flammarion, writing in 1879, describes a transit predicted for 22 March 1877 in which “astronomers all over the world, with one accord, observed the sun on that day, to descry the transit, but the result was nil”; two years earlier a claimed sighting at Peckeloh had turned out to be a sunspot. Of the two decades since 1859 he writes that “perhaps not a day has passed for the last twenty years, but that the sun has been examined at one point or another of the globe”. At the total eclipse of 29 July 1878, Watson and Swift each reported an intra-Mercurial object.

The hypothesis was not abandoned when those claims were disputed. Todd, writing in 1894, records that the search was “systematically renewed” at Caroline Island in 1883, again by Pickering in California in 1889 “with the assistance of photography”, and again at the eclipse of 16 April 1893 — each time without result, and each time “persistently looked for”. Eclipse expeditions ran on into the next century; only after Perrine’s work at the eclipses of 1901, 1905 and 1908 did Campbell judge that this brought “the observational side of the famous intra-Mercurial planet problem definitely to a close”.

Even that closed only the search, not the puzzle. What finally made Vulcan unnecessary was not an observation but a theory: general relativity, in 1915, which accounted for the entire anomaly with no extra matter at all.

Code
from discoverneptune.mercury import vulcan_mass_estimate
import numpy as np

print(f"{'Distance (AU)':>14}  {'Required mass (Earth masses)':>28}")
print("-" * 46)
M_EARTH = 1.0 / 332_946.0
for a_v in [0.10, 0.15, 0.20, 0.25]:
    m = vulcan_mass_estimate(a_v) / M_EARTH
    print(f"{a_v:>14.2f}  {m:>28.2f}")

print()
print("Any planet massive enough would be visible during solar transits.")
print("Vulcan was never found.")
 Distance (AU)  Required mass (Earth masses)
----------------------------------------------
          0.10                          0.53
          0.15                          0.24
          0.20                          0.13
          0.25                          0.09

Any planet massive enough would be visible during solar transits.
Vulcan was never found.

Three Values, One Story

Code
import matplotlib.pyplot as plt

labels = ["Le Verrier\n(1859)", "Newcomb\n(1882)", "Modern\nvalue", "Our simulation\n(GR contrib)"]
values = [
    LEVERRIER_MERCURY_1859.anomaly_arcsec_per_century,
    NEWCOMB_MERCURY_1882.anomaly_arcsec_per_century,
    MODERN_MERCURY_ANOMALY.anomaly_arcsec_per_century,
    rates.gr_contribution_arcsec_per_century,
]

def _build(theme="light"):
    apply_style(theme)
    pal = palette(theme)
    cycle = category_cycle(theme)
    bar_colors = [cycle[0], cycle[0], cycle[1], cycle[2]]
    fig, ax = plt.subplots(figsize=fig_size("wide"))
    ax.barh(labels, values, color=bar_colors)
    ax.set_xlabel("Anomalous precession (arcsec/century)")
    ax.set_title("Mercury's perihelion anomaly — from Le Verrier to GR")
    truth_line(ax, 42.98, label="Einstein's formula: 42.98", axis="x", theme=theme)
    return fig

display(dual_render(_build, alt="Mercury perihelion anomaly values from Le Verrier 1859 to modern GR, with Einstein formula reference line"))
Figure 1: The Mercury anomaly value as measured by three generations of astronomers, and our simulation’s GR contribution.

Why Neptune Worked and Vulcan Didn’t

The same inverse method — the same mathematician — produced a triumph and a failure. The difference is physics, not methodology:

  • At the distances of Uranus and Neptune, GR corrections are far below the residual scale considered here. Newtonian perturbations dominate this reconstruction.
  • At 0.39 AU (Mercury’s orbit), spacetime curvature is strong enough to produce 43 arcsec/century of precession with no matter at all.

Le Verrier’s Newtonian framework was the best available. Its failure at Mercury wasn’t a mistake — it was a signpost pointing toward a deeper theory that wouldn’t arrive for another 56 years.

References

  • Le Verrier, U. “Théorie du mouvement de Mercure.” Comptes Rendus 49 (1859).
  • Newcomb, S. “Discussion of the Transits of Mercury.” Astronomical Papers 1 (1882).
  • Einstein, A. “Erklärung der Perihelbewegung des Merkur aus der allgemeinen Relativitätstheorie.” Sitzungsberichte der Preußischen Akademie der Wissenschaften (1915).
  • Lequeux, J. Le Verrier: Magnificent and Detestable Astronomer (2013), chapter 10.
  • Flammarion, C. “The Intra-Mercurial Planets.” Popular Science Monthly 14 (April 1879) — translated from La Nature; contemporary account of the 1876 Peckeloh claim, the coordinated 22 March 1877 transit watch, and the 1878 eclipse observations.
  • Todd, M. L. Total Eclipses of the Sun (Boston: Roberts Brothers, 1894), pp. 32–33 — records the searches renewed at Caroline Island (1883), by Pickering (1889), and at the eclipse of 16 April 1893.
  • Sheehan, W. & Misch, T. “Mercury, Vulcan, and an Early Triumph for General Relativity.” The Antiquarian Astronomer 10 (June 2016), 1–12 — traces the eclipse searches through 1901, 1905 and 1908 and Campbell’s closing verdict.