lamberthub.universal_solvers.izzo#

A module hosting all algorithms devised by Izzo

Module Contents#

Functions#

izzo2015(mu, r1, r2, tof[, M, prograde, low_path, ...])

Solves Lambert problem using Izzo's devised algorithm.

_reconstruct(x, y, r1, r2, ll, gamma, rho, sigma)

Reconstruct solution velocity vectors.

_find_xy(ll, T, M, maxiter, atol, rtol, low_path)

Computes all x, y for given number of revolutions.

_compute_y(x, ll)

Computes y.

_compute_psi(x, y, ll)

Computes psi.

_tof_equation(x, T0, ll, M)

Time of flight equation.

_tof_equation_y(x, y, T0, ll, M)

Time of flight equation with externally computated y.

_tof_equation_p(x, y, T, ll)

_tof_equation_p2(x, y, T, dT, ll)

_tof_equation_p3(x, y, _, dT, ddT, ll)

_compute_T_min(ll, M, maxiter, atol, rtol)

Compute minimum T.

_initial_guess(T, ll, M, low_path)

Initial guess.

_halley(p0, T0, ll, atol, rtol, maxiter)

Find a minimum of time of flight equation using the Halley method.

_householder(p0, T0, ll, M, atol, rtol, maxiter)

Find a zero of time of flight equation using the Householder method.

lamberthub.universal_solvers.izzo.izzo2015(mu, r1, r2, tof, M=0, prograde=True, low_path=True, maxiter=35, atol=1e-05, rtol=1e-07, full_output=False)#

Solves Lambert problem using Izzo’s devised algorithm.

Parameters:
  • mu (float) – Gravitational parameter, equivalent to \(GM\) of attractor body.

  • r1 (numpy.array) – Initial position vector.

  • r2 (numpy.array) – Final position vector.

  • M (int) – Number of revolutions. Must be equal or greater than 0 value.

  • prograde (bool) – If True, specifies prograde motion. Otherwise, retrograde motion is imposed.

  • low_path (bool) – If two solutions are available, it selects between high or low path.

  • maxiter (int) – Maximum number of iterations.

  • atol (float) – Absolute tolerance.

  • rtol (float) – Relative tolerance.

  • full_output (bool) – If True, the number of iterations is also returned.

Returns:

  • v1 (numpy.array) – Initial velocity vector.

  • v2 (numpy.array) – Final velocity vector.

  • numiter (list) – Number of iterations.

Notes

This is the algorithm devised by Dario Izzo[1] in 2015. It inherits from the one developed by Lancaster[2] during the 60s, following the universal formulae approach. It is one of the most modern solvers, being a complete Lambert’s problem solver (zero and Multiple-revolution solutions). It shows high performance and robustness while requiring no more than four iterations to reach a solution.

All credits of the implementation go to Juan Luis Cano Rodríguez and the poliastro development team, from which this routine inherits. Some changes were made to adapt it to lamberthub API. In addition, the hypergeometric function is the one from SciPy.

Copyright (c) 2012-2021 Juan Luis Cano Rodríguez and the poliastro development team

References

[1] Izzo, D. (2015). Revisiting Lambert’s problem. Celestial Mechanics

and Dynamical Astronomy, 121(1), 1-15.

[2] Lancaster, E. R., & Blanchard, R. C. (1969). A unified form of

Lambert’s theorem (Vol. 5368). National Aeronautics and Space Administration.

lamberthub.universal_solvers.izzo._reconstruct(x, y, r1, r2, ll, gamma, rho, sigma)#

Reconstruct solution velocity vectors.

lamberthub.universal_solvers.izzo._find_xy(ll, T, M, maxiter, atol, rtol, low_path)#

Computes all x, y for given number of revolutions.

lamberthub.universal_solvers.izzo._compute_y(x, ll)#

Computes y.

lamberthub.universal_solvers.izzo._compute_psi(x, y, ll)#

Computes psi.

“The auxiliary angle psi is computed using Eq.(17) by the appropriate inverse function”

lamberthub.universal_solvers.izzo._tof_equation(x, T0, ll, M)#

Time of flight equation.

lamberthub.universal_solvers.izzo._tof_equation_y(x, y, T0, ll, M)#

Time of flight equation with externally computated y.

lamberthub.universal_solvers.izzo._tof_equation_p(x, y, T, ll)#
lamberthub.universal_solvers.izzo._tof_equation_p2(x, y, T, dT, ll)#
lamberthub.universal_solvers.izzo._tof_equation_p3(x, y, _, dT, ddT, ll)#
lamberthub.universal_solvers.izzo._compute_T_min(ll, M, maxiter, atol, rtol)#

Compute minimum T.

lamberthub.universal_solvers.izzo._initial_guess(T, ll, M, low_path)#

Initial guess.

lamberthub.universal_solvers.izzo._halley(p0, T0, ll, atol, rtol, maxiter)#

Find a minimum of time of flight equation using the Halley method.

Note

This function is private because it assumes a calling convention specific to this module and is not really reusable.

lamberthub.universal_solvers.izzo._householder(p0, T0, ll, M, atol, rtol, maxiter)#

Find a zero of time of flight equation using the Householder method.

Note

This function is private because it assumes a calling convention specific to this module and is not really reusable.