# Finding Lagrange points L1 and L2

The James Webb Space Telescope (JWST) is on its way to the Lagrange point L2 of the Sun-Earth system. Objects in this location will orbit the Sun at a fixed distance from Earth.

There are five Lagrange points, L1 through L5. The points L1, L2, and L3 are unstable, and points L4 and L5 are stable. Since L2 is unstable, it will have to adjust its orbit occasionally to stay at L2.

The Lagrange points L1 and L2 are nearly equally distant from Earth, with L1 between the Earth and Sun, and L2 on the opposite side of Earth from the Sun.

The equations for the distance r from L1 and L2 to Earth are very similar and can be combined into one equation: The equation for L1 corresponds to taking ± as – and the equation for L2 corresponds to taking ± as +.

In the equation above, R is the distance between the Sun and Earth, and M1 and M2 are the mass of the Sun and Earth respectively. (This is not going to be too precise since the distance between the Sun and Earth is not constant. We’ll use the mean distance for R.)

For both L1 and L2 we have Let’s use Newton’s method to solve for the distances to L1 and L2, and see how they compare to the approximation above.

    from scipy.optimize import newton

M1 = 1.988e30 # kg
M2 = 5.972e24 # kg
R  = 1.471e8  # km

approx = R*(M2/(3*M1))**(1/3)

def f(r, sign):
M = M1 + M2
ret = M1/(R + sign*r)**2 + sign*M2/r**2
ret -= (R*M1/M + sign*r)*M/R**3
return ret

L1 = newton(lambda r: f(r, -1), approx)
L2 = newton(lambda r: f(r,  1), approx)

print("L1       = ", L1)
print("approx   = ", approx)
print("L2       = ", L2)
print("L1 error = ", (approx - L1)/L1)
print("L2 error = ", (L2 - approx)/L2)


This prints the following.


L1       = 1467000
approx   = 1472000
L2       = 1477000
L1 error = 0.3357%
L2 error = 0.3312%


So L2 is slightly further away than L1. The approximate distance under-estimates L2 and over-estimates L1 both by about 0.33% .

L1 and L2 are about 4 times further away than the moon.

## Related posts

 The approximation for r makes an excellent starting point. When I set the relative error target to 1e-5, Newton’s method converged in four iterations.

    full = newton(lambda r: f(r, 1), approx, tol=1e-5, full_output=True)
print(full)