LMA: A generic and efficient implementation of the Levenberg–Marquardt Algorithm. (26th April 2017)