jorgepiloto / lamberthub

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

Implement gooding1990 solver #1

Closed jorgepiloto closed 3 years ago

jorgepiloto commented 3 years ago

💻 Solver request: gooding1990

This algorithm was originally devised by Gooding in 1990. Many of the work is built on top of Lancaster's one, but an accurate guess is made so fast convergence to the solution is achieved. In addition, the root finder used is Halley's method, so this solver is expected to be a high robust one. Gooding's routine was also extended to the multi-revolution case, so a full algorithm is available.

We should implement this under the name of gooding1990. Because this algorithm is the first of the library, let us create a sub-package called universal in which all the universal-formulae solvers are included in the sense of Python modules.

📝 References

The algorithm appeared for the first time in 1988 Gooding's publication, see the BibTeX citation:

@techreport{gooding1988solution,
  title={On the solution of Lambert's orbital boundary-value problem},
  author={Gooding, RH},
  year={1988},
  institution={ROYAL AEROSPACE ESTABLISHMENT FARNBOROUGH (UNITED KINGDOM)}
}

However, the implementation we must follow is the one comming from the revised revision, which was published two years later in 1990:

@article{gooding1990,
  title={A procedure for the solution of Lambert's orbital boundary-value problem},
  author={Gooding, RH},
  journal={Celestial Mechanics and Dynamical Astronomy},
  volume={48},
  number={2},
  pages={145--165},
  year={1990},
  publisher={Springer}
}

Source code under Fortran77 is attached at the end of this article, so we just need to update it to modern Python 🚀

jorgepiloto commented 3 years ago

This is finally implemented in the package! We now have a collection of tests for a variety of cases, including the multi-revolution scenarios and robust ones. Cool! 😎