def _kepler(k, r0, v0, tof, *, numiter): # Compute Lagrange coefficients f, g, fdot, gdot = kepler_fast(k, r0, v0, tof, numiter) assert np.abs(f * gdot - fdot * g - 1) < 1e-5 # Fixed tolerance # Return position and velocity vectors r = f * r0 + g * v0 v = fdot * r0 + gdot * v0 return r, v
def _kepler(orbit, tof, *, numiter): """Propagates Keplerian orbit. Parameters ---------- orbit : ~poliastro.twobody.orbit.Orbit the Orbit object to propagate. tof : float Time of flight (s). numiter : int, optional Maximum number of iterations, default to 35. Raises ------ RuntimeError If the algorithm didn't converge. Note ----- This algorithm is based on Vallado implementation, and does basic Newton iteration on the Kepler equation written using universal variables. Battin claims his algorithm uses the same amount of memory but is between 40 % and 85 % faster. """ # Compute Lagrange coefficients k = orbit.attractor.k.to(u.km**3 / u.s**2).value r0 = orbit.r.to(u.km).value v0 = orbit.v.to(u.km / u.s).value f, g, fdot, gdot = kepler_fast(k, r0, v0, tof, numiter) assert np.abs(f * gdot - fdot * g - 1) < 1e-5 # Fixed tolerance # Return position and velocity vectors r = f * r0 + g * v0 v = fdot * r0 + gdot * v0 return r, v
def _kepler(orbit, tof, *, numiter): """Propagates Keplerian orbit. Parameters ---------- orbit : ~poliastro.twobody.orbit.Orbit the Orbit object to propagate. tof : float Time of flight (s). numiter : int, optional Maximum number of iterations, default to 35. Raises ------ RuntimeError If the algorithm didn't converge. Note ----- This algorithm is based on Vallado implementation, and does basic Newton iteration on the Kepler equation written using universal variables. Battin claims his algorithm uses the same amount of memory but is between 40 % and 85 % faster. """ # Compute Lagrange coefficients k = orbit.attractor.k.to(u.km ** 3 / u.s ** 2).value r0 = orbit.r.to(u.km).value v0 = orbit.v.to(u.km / u.s).value f, g, fdot, gdot = kepler_fast(k, r0, v0, tof, numiter) assert np.abs(f * gdot - fdot * g - 1) < 1e-5 # Fixed tolerance # Return position and velocity vectors r = f * r0 + g * v0 v = fdot * r0 + gdot * v0 return r, v