Propagation module

digraph {
   "poliastro.core.propagation" -> "mean_motion", "kepler";

The main purpose of polaistro.core.propagation is to propagate a body along its orbit.

poliastro.core.propagation.func_twobody(t0, u_, k, ad, ad_kwargs)

Differential equation for the initial value two body problem.

This function follows Cowell’s formulation.

  • t0 (float) – Time.
  • u (ndarray) – Six component state vector [x, y, z, vx, vy, vz] (km, km/s).
  • k (float) – Standard gravitational parameter.
  • ad (function(t0, u, k)) – Non Keplerian acceleration (km/s2).
  • ad_kwargs (optional) – perturbation parameters passed to ad.

Propagates orbit using mean motion. This algorithm depends on the geometric shape of the orbit.

For the case of the strong elliptic or strong hyperbolic orbits:

\[M = M_{0} + \frac{\mu^{2}}{h^{3}}\left ( 1 -e^{2}\right )^{\frac{3}{2}}t\]

New in version 0.9.0.

  • k (float) – Standar Gravitational parameter
  • r0 (Quantity) – Initial position vector wrt attractor center.
  • v0 (Quantity) – Initial velocity vector.
  • tof (float) – Time of flight (s).


This method takes initial \(\vec{r}, \vec{v}\), calculates classical orbit parameters, increases mean anomaly and performs inverse transformation to get final \(\vec{r}, \vec{v}\) The logic is based on formulae (4), (6) and (7) from


Solves Kepler’s Equation by applying a Newton-Raphson method.

If the position of a body along its orbit wants to be computed for an specific time, it can be solved by terms of the Kepler’s Equation:

\[E = M + e\sin{E}\]

In this case, the equation is written in terms of the Universal Anomaly:

\[\sqrt{\mu}\Delta t = \frac{r_{o}v_{o}}{\sqrt{\mu}}\chi^{2}C(\alpha \chi^{2}) + (1 - \alpha r_{o})\chi^{3}S(\alpha \chi^{2}) + r_{0}\chi\]

This equation is solved for the universal anomaly by applying a Newton-Raphson numerical method. Once it is solved, the Lagrange coefficients are returned:

\[\begin{split}\begin{align} f &= 1 \frac{\chi^{2}}{r_{o}}C(\alpha \chi^{2}) \\ g &= \Delta t - \frac{1}{\sqrt{\mu}}\chi^{3}S(\alpha \chi^{2}) \\ \dot{f} &= \frac{\sqrt{\mu}}{rr_{o}}(\alpha \chi^{3}S(\alpha \chi^{2}) - \chi) \\ \dot{g} &= 1 - \frac{\chi^{2}}{r}C(\alpha \chi^{2}) \\ \end{align}\end{split}\]

Lagrange coefficients can be related then with the position and velocity vectors:

\[\begin{split}\begin{align} \vec{r} &= f\vec{r_{o}} + g\vec{v_{o}} \\ \vec{v} &= \dot{f}\vec{r_{o}} + \dot{g}\vec{v_{o}} \\ \end{align}\end{split}\]
  • k (float) – Standard gravitational parameter
  • r0 (array) – Initial position vector
  • v0 (array) – Initial velocity vector
  • numiter (int) – Number of iterations

  • f (float) – First Lagrange coefficient
  • g (float) – Second Lagrange coefficient
  • fdot (float) – Derivative of the first coefficient
  • gdot (float) – Derivative of the second coefficient


The theoretical procedure is explained in section 3.7 of Curtis in really deep detail. For analytical example, check in the same book for example 3.6.