jorgepiloto / lamberthub

A set of Lambert's problem solvers
GNU General Public License v3.0
47 stars 5 forks source link

Implement avanzini2008 solver #2

Closed jorgepiloto closed 3 years ago

jorgepiloto commented 3 years ago

💻 Solver request: avanzini2008

The algorithm developed by Avanzini in 2008 is the first of its class. It exploits the fact that projection of the eccentricity vector along the chord line is constant no matter the transfer orbit. By setting the limits for the transverse eccentricity value, it is possible to solve Kepler's equation (taking into account the type of orbit) and check if the time of transfer matches the desired one. This is the main workflow carried out by this algorithm.

Only drawbacks are that Avanzini did not provide the derivative of Kepler's equation w.r.t. the transverse eccentricity component, and thus, a step integration technique is required. This can be solved using the scipy.optimize.newton, which applies the secant method if no fprime is provided.

This algorithm must be included within the SINGLE_REV_SOLVERS, as original author did not extended it up to that particular case.

📝 References

This is a modern article, being its BibTeX the following one:

@article{avanzini2008simple,
  title={A simple Lambert algorithm},
  author={Avanzini, Giulio},
  journal={Journal of guidance, control, and dynamics},
  volume={31},
  number={6},
  pages={1587--1594},
  year={2008}
}
jorgepiloto commented 3 years ago

Because this algorithm opens a new solution approach, let us create a sub-package named ecc_solvers in addition to the universal_solvers one, where similar solvers will be placed together with this one.

jorgepiloto commented 3 years ago

Ops! I forgot to close this!