Ramanujan approximation for circumference of an ellipse
The Endeavour 2013-05-10
There’s no elementary formula for the circumference of an ellipse, but there is an elementary approximation that is extremely accurate.
An ellipse has equation (x/a)² + (y/b)² = 1. If a = b, the ellipse reduces to a circle and the circumference is simply 2πa. But the general formula for circumference requires the hypergeometric function 2F1:
where λ = (a – b)/(a + b).
However, if the ellipse is anywhere near circular, the following approximation due to Ramanujan is extremely good:
To quantify what we mean by extremely good, the error is O(λ10). When an ellipse is roughly circular, λ is fairly small, and the error is on the order of λ to the 10th power.
To illustrate the accuracy of the approximation, I tried the formula out on some planets. The error increases with ellipticity, so I took the most most elliptical orbit of a planet or object formerly known as a planet. That distinction belongs to Pluto, in which case λ = 0.016. If Pluto’s orbit were exactly elliptical, you could use Ramanujan’s approximation to find the circumference of its orbit with an error less than one micrometer.
Next I tried it on something with a much more elliptical orbit: Halley’s comet. Its orbit is nearly four times longer than it is wide. For Halley’s comet, λ = 0.59 and Ramanujan’s approximation agrees with the exact result to seven significant figures. The exact result is 11,464,319,022 km and the approximation is 11,464,316,437 km.
Here’s a video showing how elliptical the comet’s orbit is.
If you’d like to experiment with the approximation, here’s some Python code:
from scipy import pi, sqrtfrom scipy.special import hyp2f1def exact(a, b): t = ((a-b)/(a+b))**2 return pi*(a+b)*hyp2f1(-0.5, -0.5, 1, t)def approx(a, b): t = ((a-b)/(a+b))**2 return pi*(a+b)*(1 + 3*t/(10 + sqrt(4 - 3*t)))# Semimajor and semiminor axes for Halley's comet orbita = 2.667950e9 # kmb = 6.782819e8 # kmprint exact(a, b)print approx(a, b)