32.3 Levenberg-Marquardt Minimization (.NET, C#, CSharp, VB, Visual Basic, F#)
NMath provides class LevenbergMarquardtMinimizer for solving nonlinear least squares problems using the Levenberg-Marquardt method. LevenbergMarquardtMinimizer implements the INonlinearLeastSqMinimizer interface.
Constructing a LevenbergMarquardtMinimizer
Instances of LevenbergMarquardtMinimizer are constructed by specifying a maximum number of iterations, gradient tolerance, and a solution tolerance, or by accepting the defaults for these values. Iteration stops when the infinity norm of the gradient used in calculating the next step falls below the gradient tolerance, or then the L2 norm of the step size falls below the solution tolerance. For example:
Code Example – C# Levenberg-Marquardt minimization
int maxIterations = 1000;
double gradientTolerance = 1e-14;
double solutionTolerance = 1e-14;
var lm = new LevenbergMarquardtMinimizer(
maxIterations, gradientTolerance, solutionTolerance );
Code Example – VB Levenberg-Marquardt minimization
Dim MaxIterations As Integer = 1000
Dim GradientTolerance As Double = "1e-14"
Dim SolutionTolerance As Double = "1e-14"
Dim LM As New LevenbergMarquardtMinimizer(MaxIterations,
GradientTolerance, SolutionTolerance)
Class LevenbergMarquardtMinimizer provides the Minimize() method for minimizing a given multivariable function, encapsulated as a DoubleMultiVariableFunction, as described in Section 32.1.
The Minimize() method returns the solution found by the minimization:
Code Example – C# Levenberg-Marquardt minimization
DoubleVector solution = minimizer.Minimize( f, start );
Code Example – VB Levenberg-Marquardt minimization
Dim Solution As DoubleVector = Minimizer.Minimize(F, Start)
Additional information about the last performed fit is available from properties implemented as part of the INonlinearLeastSqMinimizer interface (Section 32.1).