lamberthub.universal_solvers.izzo
#
A module hosting all algorithms devised by Izzo
Module Contents#
Functions#
|
Solves Lambert problem using Izzo's devised algorithm. |
|
Reconstruct solution velocity vectors. |
|
Computes all x, y for given number of revolutions. |
|
Computes y. |
|
Computes psi. |
|
Time of flight equation. |
|
Time of flight equation with externally computated y. |
|
|
|
|
|
|
|
Compute minimum T. |
|
Initial guess. |
|
Find a minimum of time of flight equation using the Halley method. |
|
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.