* T. Strutz: ''Data Fitting and Uncertainty (A practical introduction to weighted least squares and beyond).'' 2nd edition, Springer Vieweg, 2016, {{isbn|978-3-658-11455-8}}.
* H. P. Gavin, [http://people.duke.edu/~hpgavin/ce281/lm.pdf ''The Levenberg-Marquardt method for nonlinear least squares curve-fitting problems''] ([[MATLAB]] implementation included)
=== Implementations ===
Levenberg-Marquardt is a built-in algorithm in [[SciPy]], [[GNU Octave]], [[Scilab]], [[Mathematica]] <!-- <ref>[http://reference.wolfram.com/mathematica/tutorial/UnconstrainedOptimizationIntroductionLocalMinimization.html Unconstrained optimization methods in Mathematica.</ref> -->, [[Matlab]], [[NeuroSolutions]], [[Origin (data analysis software)|Origin]], [[Fityk]], [[IGOR Pro]], [[LabVIEW]] and [[SAS (software)|SAS]] numerical computing environments. There also exist numerous software libraries which allow to use LM algorithm in standalone applications. Some of them support only basic unconstrained optimization, whilst other ones support different combinations of box and linear constraints.
Box and linearly constrained implementations:
* [[ALGLIB]] has box and linearly constrained [http://www.alglib.net/optimization/levenbergmarquardt.php implementation] of improved LM in C# and C++. Improved algorithm takes less time to converge and can use either Jacobian or exact [[Hessian matrix|Hessian]].
* [[Artelys Knitro]] is a non-linear solver with an implementation of the box-constrained Levenberg–Marquardt algorithm. It is written in C and has interfaces to C++/C#/Java/Python/MATLAB/R.
* [http://ceres-solver.org/ ceres] is a non-linear minimization library with an implementation of the box-constrained Levenberg–Marquardt algorithm. It is written in C++ and uses [http://eigen.tuxfamily.org/index.php?title=Main_Page eigen].
* [[IDL (programming language)|IDL]], add-on [http://cow.physics.wisc.edu/~craigm/idl/fitting.html MPFIT] supports box constraints.
* [http://www.ics.forth.gr/%7elourakis/levmar/ levmar] is an implementation in [[C (programming language)|C]]/[[C++]] with support for box and general linear constraints, distributed under the [[GNU General Public License]].
** levmar includes a [[MEX file]] interface for [[MATLAB]].
** [[Perl]] ([[Perl Data Language|PDL]]), [[Python (programming language)|python]], [[Haskell (programming language)|Haskell]] and [[.NET Framework|.NET]] interfaces to levmar are available: see [http://www.johnlapeyre.com/pdl/index.html PDL::Fit::Levmar] or [https://metacpan.org/module/PDL::Fit::LM PDL::Fit::LM], [https://github.com/bjodah/levmar levmar (for python)], [http://hackage.haskell.org/package/levmar HackageDB levmar] and [https://github.com/AvengerDr/LevmarSharp LevmarSharp].
* [[R (programming language)]] has the [https://cran.r-project.org/web/packages/minpack.lm/index.html minpack.lm] package (box constrained).
Unconstrained implementations:
* The oldest implementation still in use is [http://www.netlib.org/minpack/ lmdif], from [[MINPACK]], in [[Fortran]], in the [[public ___domain]]. See also:
** [http://apps.jcns.fz-juelich.de/lmfit lmfit], a self-contained [[C programming language|C]] implementation of the MINPACK algorithm, with an easy-to-use wrapper for curve fitting, liberal licence (freeBSD).
** [http://eigen.tuxfamily.org/index.php?title=Main_Page eigen], a C++ linear-algebra library, includes an adaptation of the minpack algorithm in the "NonLinearOptimization" module.
** The [[GNU Scientific Library]] has a C interface to MINPACK.
** [http://devernay.free.fr/hacks/cminpack.html C/C++ Minpack] includes the Levenberg–Marquardt algorithm.
** Python library [[scipy]], module <code>scipy.optimize.leastsq</code> provides wrapper for the [[MINPACK]] routines.
* [http://www.ics.forth.gr/%7elourakis/sparseLM/ sparseLM] is a [[C (programming language)|C]] implementation aimed at minimizing functions with large, arbitrarily [[Sparse matrix|sparse]] Jacobians. Includes a MATLAB MEX interface. Unconstrained only.
* [https://web.archive.org/web/20130722142233/http://www2.imm.dtu.dk/~hbni/Software/SMarquardt.m SMarquardt.m] is a stand-alone routine for Matlab or Octave.
* [http://www.bnikolic.co.uk/inmin/inmin-library.html InMin] library contains a C++ implementation of the algorithm based on the [http://eigen.tuxfamily.org/index.php?title=Main_Page eigen] C++ linear-algebra library. It has a pure C-language API, as well as a Python binding.
* [[NMath]] has an implementation for the [[.NET Framework]].
* [[gnuplot]] uses its own implementation [http://www.gnuplot.info/ gnuplot.info].
* [[Java (programming language)|Java programming language]] implementations: 1) [http://scribblethink.org/Computer/Javanumeric/index.html Javanumerics], 2) [https://commons.apache.org/proper/commons-math/apidocs/org/apache/commons/math4/fitting/leastsquares/LevenbergMarquardtOptimizer.html Apache Commons Math], 3) [http://finmath.net/finmath-lib/ finmath lib].
* [http://oooconv.free.fr/fitoo/fitoo_en.html OOoConv] implements the L–M algorithm as an OpenOffice.org Calc spreadsheet.
* [https://github.com/namp/lmam-olmam-matlab-toolbox LMAM/OLMAM Matlab toolbox] implements Levenberg–Marquardt with adaptive momentum for training feedforward neural networks.
* [https://raullaasner.github.io/gadfit GADfit] is a Fortran implementation of global fitting based on a modified Levenberg–Marquardt. Uses automatic differentiation. Allows fitting functions of arbitrary complexity, including integrals.
{{Optimization algorithms}}
{{DEFAULTSORT:Levenberg-Marquardt algorithm}}
[[Category:Statistical algorithms]]
[[Category:Optimization algorithms and methods]]
[[Category:Least squares]]
|