Theory of Relativity
Prerequisites & Foundations
Math, classical mechanics & electromagnetism basicsCrisis of Classical Physics
Why relativity was neededSpecial Relativity
Physics at high speedsSpacetime & Geometry
Minkowski spacetime and diagramsGeneral Relativity
Gravity as curved spacetimeCosmology
Relativity at universe scaleExperimental Verification
Evidence and real-world testsMathematical Relativity
Tensors and differential geometryAdvanced Topics & Frontiers
Quantum gravity, wormholes & beyondApplications of Relativity
GPS, astrophysics & technologyClassic Tests of General Relativity
Einstein himself proposed three classical tests when he published General Relativity in 1915. These tests — the perihelion precession of Mercury, the deflection of starlight by the Sun, and gravitational redshift — formed the initial pillars of experimental verification. Each addressed a prediction that Newtonian gravity could not explain.
flowchart LR
A["1859
Le Verrier notes
Mercury anomaly"] --> B["1915
Einstein explains
43"/century"]
B --> C["1919
Eddington eclipse
Light bending"]
C --> D["1959
Pound-Rebka
Gravitational redshift"]
D --> E["1971
Hafele-Keating
Atomic clocks"]
E --> F["1974
Hulse-Taylor
Binary pulsar"]
F --> G["2004
Gravity Probe B
Frame dragging"]
G --> H["2015
LIGO
Gravitational waves"]
Mercury's Perihelion Precession
The first triumph of General Relativity was explaining an anomaly that had puzzled astronomers for over half a century. Mercury's orbit is an ellipse, and the point of closest approach to the Sun (the perihelion) slowly rotates around the Sun — a phenomenon called precession.
Newtonian gravity, accounting for perturbations from all other planets, predicted a precession rate of about 5,557 arcseconds per century. But observations showed 5,600 arcseconds per century — a discrepancy of 43 arcseconds per century (about 0.77%). This tiny residual, first noted by Urbain Le Verrier in 1859, resisted all Newtonian explanations. Some astronomers even proposed a hidden planet ("Vulcan") between Mercury and the Sun.
Einstein's General Relativity predicts an additional precession due to the curvature of spacetime near the Sun:
Where:
- G = gravitational constant = 6.674 × 10⁻¹¹ m³/(kg·s²)
- M_\odot = solar mass = 1.989 × 10³⁰ kg
- c = speed of light = 2.998 × 10⁸ m/s
- a = semi-major axis of Mercury's orbit = 5.791 × 10¹⁰ m
- e = orbital eccentricity = 0.2056
import numpy as np
# ============================================================
# MERCURY PERIHELION PRECESSION CALCULATION
# Einstein's first verification of General Relativity (1915)
# ============================================================
# Physical constants
G = 6.674e-11 # gravitational constant (m^3 kg^-1 s^-2)
c = 2.998e8 # speed of light (m/s)
M_sun = 1.989e30 # solar mass (kg)
# Mercury orbital parameters
a_mercury = 5.791e10 # semi-major axis (m)
e_mercury = 0.2056 # eccentricity
T_mercury = 87.969 # orbital period (days)
# GR precession per orbit (radians)
delta_phi_per_orbit = (6 * np.pi * G * M_sun) / (c**2 * a_mercury * (1 - e_mercury**2))
# Convert to arcseconds per orbit
arcsec_per_rad = 206265 # arcseconds in one radian
delta_phi_arcsec = delta_phi_per_orbit * arcsec_per_rad
# Convert to arcseconds per century
orbits_per_century = 100 * 365.25 / T_mercury
precession_per_century = delta_phi_arcsec * orbits_per_century
print("=" * 60)
print("MERCURY PERIHELION PRECESSION — General Relativity")
print("=" * 60)
print(f"\nOrbital Parameters:")
print(f" Semi-major axis a = {a_mercury:.3e} m")
print(f" Eccentricity e = {e_mercury}")
print(f" Orbital period T = {T_mercury} days")
print(f"\nGR Precession per orbit: {delta_phi_per_orbit:.6e} rad")
print(f" = {delta_phi_arcsec:.4f} arcseconds")
print(f"\nOrbits per century: {orbits_per_century:.1f}")
print(f"\n{'='*60}")
print(f"GR PRECESSION = {precession_per_century:.2f} arcseconds/century")
print(f"{'='*60}")
print(f"\nObserved anomalous precession: 43.11 ± 0.45 arcsec/century")
print(f"GR prediction: {precession_per_century:.2f} arcsec/century")
print(f"Agreement: {precession_per_century/43.11*100:.1f}%")
# Compare with other planets
print(f"\n--- GR Precession for Other Planets ---")
planets = {
'Mercury': (5.791e10, 0.2056, 87.969),
'Venus': (1.082e11, 0.0068, 224.7),
'Earth': (1.496e11, 0.0167, 365.25),
'Mars': (2.279e11, 0.0934, 687.0)
}
for name, (a, e, T) in planets.items():
dp = (6 * np.pi * G * M_sun) / (c**2 * a * (1 - e**2))
orbits = 100 * 365.25 / T
total = dp * arcsec_per_rad * orbits
print(f" {name:<10}: {total:.2f} arcsec/century")
Light Bending & the 1919 Eclipse
General Relativity predicts that light passing near a massive object follows the curvature of spacetime. For a light ray grazing the surface of the Sun, the deflection angle is:
This is exactly twice the value predicted by Newtonian gravity (which treats light as particles affected by gravity). The factor of 2 comes from the spatial curvature contribution — in GR, both time and space are curved, each contributing equally to the deflection.
Eddington's 1919 Solar Eclipse Expedition
On May 29, 1919, British astronomer Arthur Eddington led two expeditions — one to Sobral, Brazil, and one to the island of Príncipe off West Africa — to photograph stars near the Sun during a total solar eclipse. Only during an eclipse could stars near the Sun's limb be observed.
Eddington compared the apparent positions of stars near the eclipsed Sun to their known positions when the Sun was elsewhere in the sky. The results:
- Sobral: 1.98 ± 0.12 arcseconds (full aperture), 0.93 ± 0.05 arcseconds (astrographic lens — later discounted due to focus issues)
- Príncipe: 1.61 ± 0.30 arcseconds
- GR prediction: 1.75 arcseconds
- Newtonian prediction: 0.87 arcseconds
The results confirmed Einstein's prediction over Newton's. On November 6, 1919, the results were announced at a joint meeting of the Royal Society and Royal Astronomical Society in London. The next day, The Times ran the headline: "Revolution in Science — New Theory of the Universe — Newtonian Ideas Overthrown." Einstein became a worldwide celebrity overnight.
Light from distant sources bends around massive objects. Increase mass to see stronger lensing. Perfect alignment creates an Einstein ring.
Gravitational Redshift: The Pound-Rebka Experiment
Einstein's third classical test predicted that light climbing out of a gravitational well loses energy and becomes redshifted. The fractional shift for light traveling vertically upward through a height h on Earth's surface is:
In 1959, Robert Pound and Glen Rebka at Harvard used gamma rays from iron-57 atoms (via the Mössbauer effect) traveling 22.5 meters up the Jefferson Tower. The predicted fractional shift was incredibly tiny: 2.46 \times 10^{-15}. Their measured result: (2.57 \pm 0.26) \times 10^{-15} — in beautiful agreement with GR within 10% accuracy. A refined version in 1964 achieved 1% agreement.
Modern Evidence
While the classic tests confirmed GR qualitatively, modern experiments achieve precision levels that were unimaginable in Einstein's time. These tests verify relativity not just as approximately correct, but as precise to parts per billion.
Particle Accelerators & Muon Lifetime
Cosmic ray muons provide one of the most dramatic confirmations of special relativistic time dilation. Muons are unstable particles created when cosmic rays hit the upper atmosphere at altitudes of ~15 km. Their rest-frame half-life is only \tau_0 = 2.2 \, \mu s. At the speed of light, they would travel only c \times \tau_0 = 660 meters before decaying — they should never reach the ground.
Yet we detect copious muons at sea level. The explanation: muons travel at ~0.998c, giving a Lorentz factor of \gamma \approx 15.8. In our frame, their lifetime is dilated to \gamma \tau_0 \approx 34.8 \, \mu s, allowing them to travel ~10.4 km — easily reaching the surface. This was confirmed experimentally by Rossi and Hall in 1941 and with high precision at CERN in 1977.
The Hafele-Keating Experiment (1971)
In October 1971, physicists Joseph Hafele and Richard Keating placed four cesium-beam atomic clocks aboard commercial airliners and flew them around the world — once eastward and once westward. They compared the airborne clocks to reference clocks at the U.S. Naval Observatory.
The results confirmed both effects:
- Eastward trip: Predicted −40 ± 23 ns, Observed −59 ± 10 ns
- Westward trip: Predicted +275 ± 21 ns, Observed +273 ± 7 ns
The asymmetry arises because eastward-flying clocks move faster relative to the non-rotating frame (adding to Earth's rotational velocity), while westward-flying clocks move slower relative to that frame.
GPS & Relativity
The Global Positioning System is perhaps the most ubiquitous everyday technology that requires relativistic corrections. GPS satellites orbit at an altitude of approximately 20,200 km with an orbital speed of about 3.87 km/s. Without relativistic corrections, GPS positions would drift by approximately 10 km per day — rendering the system useless.
flowchart TD
A["GPS Satellite Clock
Altitude: 20,200 km
Speed: 3.87 km/s"] --> B["Special Relativity
Time dilation (speed)
Clock runs SLOWER
−7.2 μs/day"]
A --> C["General Relativity
Gravitational time dilation
Clock runs FASTER
+45.9 μs/day"]
B --> D["Net Correction
+38.7 μs/day
Satellite clock runs
faster than ground"]
C --> D
D --> E["Position Error if Uncorrected
~11.5 km/day drift
(c × 38.7 μs = 11.6 km)"]
Two relativistic effects act on GPS satellite clocks:
Special Relativistic Correction (Velocity)
GPS satellites move at v = 3,870 m/s relative to the ground. Special relativity predicts their clocks tick slower by a factor:
This amounts to the satellite clocks losing approximately 7.2 microseconds per day.
General Relativistic Correction (Gravity)
At 20,200 km altitude, satellites experience weaker gravity than ground clocks. GR predicts their clocks tick faster:
This causes GPS clocks to gain approximately 45.9 microseconds per day.
The net effect: GPS clocks run +38.7 microseconds per day faster than ground clocks. Since light travels 300 meters per microsecond, this would cause a positioning error of approximately 11.6 km per day if left uncorrected.
import numpy as np
# ============================================================
# GPS RELATIVISTIC TIME CORRECTIONS
# Both Special and General Relativity are required for GPS
# ============================================================
# Physical constants
G = 6.674e-11 # gravitational constant (m^3 kg^-1 s^-2)
c = 2.998e8 # speed of light (m/s)
M_earth = 5.972e24 # Earth mass (kg)
R_earth = 6.371e6 # Earth radius (m)
# GPS satellite parameters
h_gps = 20_200_000 # orbital altitude (m)
R_orbit = R_earth + h_gps # orbital radius (m)
v_gps = 3_870 # orbital speed (m/s)
# ============================================================
# SPECIAL RELATIVITY: Time dilation due to satellite velocity
# Moving clocks run SLOWER: Δt/t = -(1/2)(v²/c²)
# ============================================================
sr_factor = -0.5 * (v_gps**2 / c**2)
sr_us_per_day = sr_factor * 86400 * 1e6 # microseconds per day
# ============================================================
# GENERAL RELATIVITY: Gravitational time dilation
# Higher altitude = weaker gravity = clock runs FASTER
# Δt/t = (GM/c²)(1/R_earth - 1/R_orbit)
# ============================================================
gr_factor = (G * M_earth / c**2) * (1/R_earth - 1/R_orbit)
gr_us_per_day = gr_factor * 86400 * 1e6 # microseconds per day
# Net correction
net_factor = sr_factor + gr_factor
net_us_per_day = net_factor * 86400 * 1e6
# Position error without correction
position_error_m = abs(net_us_per_day) * 1e-6 * c # meters per day
position_error_km = position_error_m / 1000
# Clock frequency adjustment
f_nominal = 10.23e6 # nominal frequency (Hz)
f_adjusted = f_nominal * (1 + sr_factor + gr_factor) # adjusted frequency
print("=" * 60)
print("GPS RELATIVISTIC CORRECTIONS")
print("=" * 60)
print(f"\nGPS Satellite Parameters:")
print(f" Altitude: {h_gps/1000:.0f} km")
print(f" Orbital radius: {R_orbit/1000:.0f} km")
print(f" Orbital speed: {v_gps:.0f} m/s")
print(f"\n--- Special Relativity (velocity) ---")
print(f" Fractional shift: {sr_factor:.3e}")
print(f" Effect: {sr_us_per_day:.2f} μs/day (clock runs SLOWER)")
print(f"\n--- General Relativity (gravity) ---")
print(f" Fractional shift: {gr_factor:.3e}")
print(f" Effect: +{gr_us_per_day:.2f} μs/day (clock runs FASTER)")
print(f"\n{'='*60}")
print(f" NET CORRECTION: +{net_us_per_day:.2f} μs/day")
print(f" Position drift if uncorrected: {position_error_km:.1f} km/day")
print(f"{'='*60}")
print(f"\nClock Frequency Adjustment:")
print(f" Nominal frequency: {f_nominal/1e6:.5f} MHz")
print(f" Adjusted frequency: {f_adjusted:.5f} Hz")
print(f" Adjustment needed: {(f_adjusted - f_nominal):.6f} Hz")
print(f"\n In practice: 10.22999999543 MHz (factory-set)")
Gravitational Waves & LIGO
Einstein predicted gravitational waves in 1916 — ripples in the fabric of spacetime produced by accelerating massive objects. For nearly a century, they remained undetected due to their extraordinarily tiny amplitude. On September 14, 2015, at 09:50:45 UTC, the Laser Interferometer Gravitational-Wave Observatory (LIGO) made history by directly detecting gravitational waves for the first time.
GW150914: First Direct Detection of Gravitational Waves
The signal, designated GW150914, came from two black holes — one 36 solar masses and one 29 solar masses — spiraling together and merging 1.3 billion light-years away. In the final 0.2 seconds before merger, the system radiated approximately 3 solar masses worth of energy (5.4 × 10⁴⁷ J) as gravitational waves — briefly outshining the entire observable universe in gravitational wave luminosity.
The signal was detected by both LIGO detectors (Hanford, Washington and Livingston, Louisiana) separated by 3,002 km, arriving at Livingston 6.9 milliseconds before Hanford — consistent with a source in the southern sky. The peak strain was h \approx 1.0 \times 10^{-21}, meaning the 4-km detector arms changed length by about 4 × 10⁻¹⁸ m — roughly 1/1000th the diameter of a proton.
Rainer Weiss, Barry Barish, and Kip Thorne received the 2017 Nobel Prize in Physics for this achievement.
How LIGO Works
LIGO uses laser interferometry to measure incredibly tiny changes in distance. A laser beam is split and sent down two perpendicular arms, each 4 km long. The beams bounce off mirrors at the ends and recombine at a photodetector. In the absence of gravitational waves, the beams are perfectly aligned to cancel (destructive interference) — no light reaches the detector.
When a gravitational wave passes, it stretches one arm and compresses the other. This changes the interference pattern, producing a signal at the photodetector. The required sensitivity is astonishing — LIGO must detect changes in arm length of \Delta L \sim 10^{-18} m over a 4-km baseline.
The characteristic gravitational wave strain h from a binary system at distance r is approximately:
Where \mathcal{M} is the chirp mass and f_{GW} is the gravitational wave frequency.
import numpy as np
# ============================================================
# GRAVITATIONAL WAVE STRAIN FROM A BINARY BLACK HOLE MERGER
# Modeling the inspiral phase of GW150914
# ============================================================
# Physical constants
G = 6.674e-11 # gravitational constant (m^3 kg^-1 s^-2)
c = 2.998e8 # speed of light (m/s)
M_sun = 1.989e30 # solar mass (kg)
pc = 3.086e16 # parsec in meters
# GW150914 parameters
m1 = 36 * M_sun # mass of black hole 1 (kg)
m2 = 29 * M_sun # mass of black hole 2 (kg)
d_Mpc = 410 # luminosity distance (Mpc)
d = d_Mpc * 1e6 * pc # distance in meters
# Chirp mass: M_c = (m1*m2)^(3/5) / (m1+m2)^(1/5)
M_chirp = (m1 * m2)**(3./5) / (m1 + m2)**(1./5)
M_chirp_solar = M_chirp / M_sun
# Gravitational wave frequency during inspiral
# f_GW increases as the binary spirals inward ("chirp")
t_merge = np.linspace(-0.5, -0.001, 1000) # time before merger (s)
# Frequency evolution: f(t) ~ (t_c - t)^(-3/8)
# Simplified Newtonian chirp formula
tau = -t_merge # time to coalescence
f_gw = (1 / (8*np.pi)) * (5 / (256 * tau))**(3./8) * \
(G * M_chirp / c**3)**(-5./8)
# Strain amplitude: h ~ (G*M_c)^(5/3) * (pi*f)^(2/3) / (c^4 * d)
h_amplitude = (4 / d) * (G * M_chirp / c**2)**(5./3) * \
(np.pi * f_gw / c)**(2./3)
# Phase evolution (simplified)
phi = -2 * (tau / (5 * G * M_chirp / c**3))**(5./8)
h_signal = h_amplitude * np.cos(phi)
# Calculate peak values
peak_strain = np.max(h_amplitude)
peak_freq = np.max(f_gw[f_gw < 500]) # cap below merger frequency
# LIGO arm length change at peak
L_arm = 4000 # LIGO arm length (m)
delta_L = peak_strain * L_arm
print("=" * 60)
print("GRAVITATIONAL WAVE SIGNAL: GW150914")
print("=" * 60)
print(f"\nBinary System Parameters:")
print(f" Black hole 1: {m1/M_sun:.0f} M☉")
print(f" Black hole 2: {m2/M_sun:.0f} M☉")
print(f" Chirp mass: {M_chirp_solar:.1f} M☉")
print(f" Distance: {d_Mpc} Mpc (1.3 billion light-years)")
print(f"\nGravitational Wave Properties:")
print(f" Peak strain: h ≈ {peak_strain:.2e}")
print(f" Peak frequency: f ≈ {peak_freq:.0f} Hz")
print(f" LIGO arm change: ΔL ≈ {delta_L:.2e} m")
print(f" (That's {delta_L/1e-15:.3f} femtometers — 1/1000 of a proton!)")
print(f"\nEnergy Radiated:")
E_radiated = 3 * M_sun * c**2
print(f" ~3 M☉c² = {E_radiated:.2e} J")
print(f" Peak luminosity > entire observable universe!")
# Print frequency evolution at key times
print(f"\n--- Frequency Chirp Timeline ---")
for t in [-0.5, -0.2, -0.1, -0.05, -0.01, -0.005]:
tau_t = -t
f_t = (1/(8*np.pi)) * (5/(256*tau_t))**(3./8) * \
(G*M_chirp/c**3)**(-5./8)
if f_t < 1000:
print(f" t = {t:+.3f}s before merger: f = {f_t:.1f} Hz")
Precision Tests
Beyond the headline experiments, a series of increasingly precise tests have confirmed GR to extraordinary accuracy. These experiments probe different aspects of the theory and constrain possible deviations.
Shapiro Time Delay (1964)
Irwin Shapiro predicted in 1964 that radar signals passing near the Sun would be delayed by the Sun's gravitational field — a "fourth test" of GR beyond Einstein's original three. The round-trip delay for a signal passing at distance d from the Sun is approximately:
For a signal grazing the Sun traveling to Mars and back, the additional delay is about 200 microseconds. This was first confirmed in 1968 using radar echoes from Mercury and Venus, and later with spacecraft (Mariner 6 & 7, Viking landers). The Cassini spacecraft (2003) measured the Shapiro delay to within 0.002% agreement with GR — the most precise test of the \gamma parameter (= 1 in GR, differs in alternative theories):
Frame Dragging — Gravity Probe B (2004-2011)
General Relativity predicts that a rotating mass "drags" spacetime around with it — an effect called frame dragging (or the Lense-Thirring effect). NASA's Gravity Probe B satellite (launched April 20, 2004) measured this effect using four ultra-precise gyroscopes in polar orbit at 642 km altitude.
The predicted frame-dragging precession rate due to Earth's rotation is only 39.2 milliarcseconds per year — so small that the gyroscopes needed to be the most spherical objects ever manufactured (quartz spheres accurate to 40 atoms). After years of painstaking data analysis (accounting for unexpected electrostatic patches on the gyroscopes), the final results announced in 2011 confirmed GR:
- Geodetic precession: −6,601.8 ± 18.3 mas/yr (GR prediction: −6,606.1 mas/yr) — 0.28% accuracy
- Frame-dragging: −37.2 ± 7.2 mas/yr (GR prediction: −39.2 mas/yr) — 19% accuracy
Binary Pulsars — The Hulse-Taylor System (1974)
In 1974, Russell Hulse and Joseph Taylor discovered PSR B1913+16 — a pulsar in orbit with another neutron star. This system provided the first indirect evidence for gravitational waves, decades before LIGO.
The orbital period of the binary (7.75 hours) is decreasing at a rate of about 76.5 microseconds per year — precisely matching the energy loss predicted by GR due to gravitational wave emission. Over 30+ years of observation, the cumulative orbital decay matches the GR prediction to within 0.2%. Hulse and Taylor received the 1993 Nobel Prize for this discovery.
Practice Exercises
Test your understanding of the experimental evidence for relativity:
Exercise 1: Mercury Precession
Calculate the GR precession for a hypothetical planet orbiting at Mercury's distance but with eccentricity e = 0.5 (much more eccentric). How does increased eccentricity affect the observable precession?
Exercise 2: GPS Without Relativity
A GPS satellite transmits a timing signal. If relativistic corrections are disabled for exactly 24 hours:
- By how many microseconds will the satellite clock drift?
- What is the resulting position error in meters?
- After one week, how large would the accumulated error be?
Exercise 3: Muon Survival
Muons are produced at 15 km altitude traveling at v = 0.998c. Their rest-frame half-life is 2.2 \, \mu s.
- Calculate the Lorentz factor \gamma.
- What is the dilated lifetime in the lab frame?
- How far can the muon travel in the lab frame before one half-life?
- What fraction of muons produced at 15 km reach sea level?
Exercise 4: Gravitational Wave Detection
LIGO detected a strain of h = 10^{-21} with 4-km arms.
- What is the actual length change \Delta L in meters?
- How many proton diameters is this? (proton diameter ≈ 10⁻¹⁵ m)
- If we built a detector with 40-km arms (like the proposed Einstein Telescope), what would the corresponding \Delta L be?
Conclusion & Next Steps
Over more than a century, Einstein's theory of relativity has passed every experimental test thrown at it — from subtle orbital precessions measurable only with decades of data to cataclysmic events detectable only with the most sensitive instruments ever built. The progression from Le Verrier's 43-arcsecond puzzle in 1859 to LIGO's 10⁻²¹ strain measurement in 2015 represents one of the greatest achievements in the history of science.
Key experimental confirmations include:
- Mercury's precession — 43"/century, exact GR prediction (1915)
- Light deflection — 1.75 arcseconds confirmed by Eddington (1919)
- Gravitational redshift — Pound-Rebka at 1% precision (1959-1964)
- Time dilation — Hafele-Keating clocks on planes (1971)
- Gravitational waves (indirect) — Hulse-Taylor binary pulsar decay (1974+)
- GPS corrections — 38.7 μs/day continuous operational verification (1978+)
- Shapiro delay — Cassini at 0.002% (2003)
- Frame dragging — Gravity Probe B confirmation (2004-2011)
- Gravitational waves (direct) — LIGO GW150914 (2015)
- Black hole imaging — Event Horizon Telescope M87* shadow (2019)
No experiment has ever contradicted General Relativity within its domain of applicability. The only known regime where GR is expected to break down is at the quantum scale (Planck length ~ 10⁻³⁵ m), where a theory of quantum gravity is needed — a topic explored in Part 9.
In the next part, we turn to the mathematical foundations that make all of this precise — the language of tensors, differential geometry, and manifolds that underpin Einstein's field equations.
Next in the Series
In Part 8: Mathematical Relativity, we develop the full mathematical apparatus of GR — tensors, covariant derivatives, Christoffel symbols, the Riemann curvature tensor, and how Einstein's field equations emerge from differential geometry.