# Physical meaning of perigee advance

I'm starting to study orbital perturbations and I can't find any physical explanation about the perigee advance (apsidal precession) when considering Earth oblateness effects. Can someone give a physical explanation or recommend a book/article to read?.

PS: From the equations it is quite clear that it must happen, but I am looking for some sort of physical meaning similar to the change in angular momentum due to equatorial bulges when studying nodes regression.

• This is an interesting question! If you can mention or add a link to what you are currently reading, it might be helpful for an answer to be written with similar language/terminology. I noticed my first few clicks into Wikipedia failed to find a derivation or even a formula, but I was surprised to learn that the Moon's apsidal precession period is only 8.85 years, which means every orbit around the Earth advances its periapsis by about 3 degrees! It's even faster than the nodal precession period of 18.60 years. Amazing! – uhoh Oct 4 '17 at 16:03
• I have a hunch that the math for an artificial point-mass satellite will turn up something much slower than for the moon with it's strong tidal effects. By the way, you may want to peruse the references in this excellent answer! – uhoh Oct 4 '17 at 16:04

In the subsection The deviations of Earth's gravitational field from that of a homogeneous sphere of the Wikipedia article on Geopotential model you can see that the $J_2$ or quadrupole moment of the Earth's gravitational potential falls off much more rapidly with distance than the monopole term. In the Earth's equatorial plane, the acceleration due to the monopole and quadrupole moments are given as:

$$a_0 = -\frac{GM_E}{r^2},$$

$$a_2 = -\frac{3}{2} J_2 \frac{GM_E R_E^2}{r^4},$$

where the unit-less value of Earth's $J_2$ is about 0.0010825 and $R_E$ is the normalizing radius of the Earth of 6378136.3 meters, and the standard gravitational parameter of the Earth $GM_E$ is about 3.986E+14 m^3/s^2.

You can read a little more about Earth's $J_2$ and it's effect on gravity at the equator and poles in David Hammen's nice table.

On the Earth's surface, at the equator, the values for these two are 9.7983 and 0.0159 m/s^2 respectively, but remember that they fall of with distance as $1/r^2$ and $1/r^4$ respectively as well.

So a satellite orbiting in Earth's equatorial plane in an elliptical orbit will "think" that the Earth's gravity is stronger at periapsis than at apoapsis, even taking $1/r^2$ into account.

Since the Earth (or any oblate spheroid) "pulls harder" as the satellite swings closest to the planet, it sort-of wraps the orbit tighter. The following apoapsis will come a bit later and advance around the planet, as will the periapsis.

Here is a Python simulation run for a satellite in a very elliptical LEO orbit with a periapsis altitude of about 400km and apoapsis altitude of about 32,000 km. I've run it for Earths normal $J_2$, and again for ten times larger $J_2$ to magnify the effect so that each orbit clearly advances. In addition to the advancement you can see that the semimajor axis is slightly smaller for the larger $J_2$ because the average gravitational force is slightly larger.

def deriv(X, t):

x, v = X.reshape(2, -1)

acc0  = -GMe * x * ((x**2).sum())**-1.5
acc2  = -1.5 * GMe * J2 * Re**2 * x * ((x**2).sum())**-2.5

return np.hstack([v, acc0 + acc2])

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint as ODEint

# David Hammen's nice table https://physics.stackexchange.com/a/141981/83380
# See http://www.iag-aig.org/attach/e354a3264d1e420ea0a9920fe762f2a0/51-groten.pdf
# https://en.wikipedia.org/wiki/Geopotential_model#The_deviations_of_Earth.27s_gravitational_field_from_that_of_a_homogeneous_sphere

GMe = 3.98600418E+14  # m^3 s^-2
J2e = 1.08262545E-03  # unitless
Re  = 6378136.3 # meters

X0 = np.hstack([6778000.0, 0.0, 0.0, 10000.])  # x, y, vx, vy

time = np.arange(0, 300001, 100)

J2 = J2e  # correct J2
answerJ2, info = ODEint(deriv, X0, time, full_output=True)

J2 = 10*J2e # 10x larger J2
answer10xJ2, info = ODEint(deriv, X0, time, full_output=True)

if 1 == 1:
plt.figure()
plt.plot(x, y, '-b')