# Why does the eccentricity of Venus's (and other) orbits as reported by Horizons vary based on the frame origin and basis?

I did try to think this through before posting, but I am going to need some explanation. In my (perhaps naïve) view, an ellipse will have the same eccentricity no matter what frame it is in. In Horizons, if you ask for elements for Venus on 2018-1-3 00:00 TDB, if you set the origin to 500@0 (solar system barycenter) you get:

EC= 1.701169124295256E-02 (0.01701)

and if you set to 500@Sun you get:

EC= 6.802128501627439E-03 (0.0068)

This is confusing to me. Changing the reference frame doesn't change the focus or center of the ellipse - I should be able to set the coordinate origin to anything in the universe and still see an ellipse with a particular singular eccentricity so long as the frame remains Euclidean. Thanks!

State vectors ($x, y, z, v_x, v_y, v_z$) are the real output of the ephemeris for the planets and moons, and the orbit propagators for the minor bodies and spacecraft that Horizons provides. What you are looking at are Osculating Orbital Elements, which are the instantaneous values of a hypothetical, elliptical orbit that would be tangent to the real orbit at that moment in time. Every new line in the osculating elements table is a totally different hypothetical orbit that is perfectly tangent to the real orbit at that moment only.

An excellent clue to this would be the fact that every point in time has new values for all of the orbital elements. If these were fixed, elliptical orbits instead of instantaneous osculating elements, the numbers would not have to be recalculated for each point in time.

You can read more about osculating vs Keplerian orbits in this excellent answer. You can also see "live" osculating orbits changing moment-by-moment in the excellent YouTube video Pythagorean 3-Body Problem With Osculating Orbits. Here is a screen shot: (read more about this mathematical problem in this question.) While the orbits (thick lines) are chaotic, the osculating orbits are always elliptical.

No solar system orbit is perfectly elliptical because of the mutual gravitational attraction between all bodies, including central and tidal forces. However, for the period of one year, Venus' orbit around the Sun itself is much closer to elliptical than is it's path around the solar system barycenter. Over years, the Sun slowly moves around by a few hundred thousand kilometers in response to the motion of the large outer planets Jupiter, Saturn, Uranus and Neptune. However, the inner planets keep fairly close to Kelperian orbits around the Sun wherever it happens to be at the time.

Here is the setup I used to extract daily osculating elements for Venus around first the Sun (body centered) and then the solar system barycenter.

This is a plot of some of those elements, including eccentricity. The straight (blue) lines are the osculating parameters for the Sun-centered data, and the wavy (green) lines are the osculating parameters calculated about the Solar System Barycenter. You can see that for the barycentric osculating elements they vary quite a bit, while the osculating elements for orbits about the Sun are almost constant, meaning that the real orbit of Venus is extremely close to a hypothetical elliptical orbit around the Sun.

You can see your values of ~0.017 and ~0.007 as the starting points on the left side of the top (eccentricity) plot!

I've also included the Python script that made the plot, so you can check how it's done.

import numpy as np
import matplotlib.pyplot as plt

fnames = ("Venus Sun 2018 daily horizons_results.txt",
"Venus Bary 2018 daily horizons_results.txt")

"""
JDTDB  Julian Day Number, Barycentric Dynamical Time
EC     Eccentricity, e
QR     Periapsis distance, q (au)
IN     Inclination w.r.t XY-plane, i (degrees)
OM     Longitude of Ascending Node, OMEGA, (degrees)
W      Argument of Perifocus, w (degrees)
Tp     Time of periapsis (Julian Day Number)
N      Mean motion, n (degrees/day)
MA     Mean anomaly, M (degrees)
TA     True anomaly, nu (degrees)
A      Semi-major axis, a (au)
PR     Sidereal orbit period (day)
"""

blobs = []
element_sets = []
for fname in fnames:
with open(fname, 'r') as infile:
print fname
istart = [i for i, line in enumerate(blob) if "$$SOE" in line][0] iend = [i for i, line in enumerate(blob) if "$$EOE" in line][0]
print len(blob), istart, iend

blob = [line.split(',') for line in blob[istart+1: iend]]
blobs.append(blob)
JD = np.array([float(line[0]) for line in blob])
elements = np.array([[float(x) for x in line[2:14]] for line in blob])
data = np.vstack((JD, elements.T))
element_sets.append(data)

Data = np.stack(element_sets, axis=1)[..., :225] # just 225 days
print Data.shape

if 1 == 1:
plt.figure()
indices = (1, 2, 10, 11, 12)
names = ('eccentricity', 'periapsis (AU)', 'semi-major axis (AU)',
'apoapsis AU', 'period (days)')
for i, (j, name) in enumerate(zip(indices, names)):
plt.subplot(len(indices), 1, i+1)
for k, thing in enumerate(Data[j]):
plt.plot(Data[0, k]-Data[0, k, 0], thing)
plt.title(name)
plt.show()
• Following the link to the mathematics problem lead to more questions than it answered. My question came from using various ODE solvers on the solar system, then computing kepler elements from that, and I wondered why I didn't get the same answer that Horizons does. Some of the comments in the mathematics link are curious, I routinely get slightly different results depending on the method (Euler or RK or Velocity Verlet) even with the exact same initial conditions. I suppose that's a topic for the other thread, but I have my answer for my original question, thanks. – sudnadja Jan 4 '18 at 7:04
• @sudnadja there does not seem to be a limit to the number of questions that can be asked here! :-) There are several people here who can answer mathematical questions about orbital mechanics better than I can. In the mean time, take a look at this and this answer. – uhoh Jan 4 '18 at 10:00