Izzo algorithm for Lambert's problem - poliastro/poliastro GitHub Wiki

Resources

Performance

In section 5 there are some interesting performance explanations.

For the purose [sic] of this test we reimplement both our and Gooding algorithm in pure Python language (i.e. no C++ bindings) and we record the execution time to solve the same 100,000 randomly generated problems (using the same bounds as above). In the case M = 0, the proposed algorithm resulted to be faster by a factor 1.25, while in the multi revolution cases by a factor 1.5.

In short, Izzo algorithm results faster than Gooding. It uses a quartic (instead of cubic) iteration scheme and a better initial guess.

Iteration schemes

There are some subtle naming convention details that I need to clarify.

Gooding algorithm employs Halley iterations, while we make use of Householder iterative scheme. While Halley’s method has a slighlty lower complexity and does not need to compute also the third derivative from Eq.(22), our iterative scheme reaches, in the case M = 0, a comparable accuracy in only 2 iterations on average compared to the 3 iterations needed for the Gooding case.

Coding

SciPy has had Halley's method since 0.11 (not documented on the release notes, by the way), whereas Householder (quartic?) scheme is not implemented anywhere (after a quick Google search).

On the other hand, it's not clear if scipy.optimize.newton is numbifiable or not. For instance, it is used in poliastro.twobody.angles but without acceleration. This is a problem worth exploring on its own.