Optimization Toolbox    

Levenberg-Marquardt Implementation

The main difficulty in the implementation of the Levenberg-Marquardt method is an effective strategy for controlling the size of at each iteration so that it is efficient for a broad spectrum of problems. The method used in this implementation is to estimate the relative nonlinearity of f(x) using a linear predicted sum of squares and a cubicly interpolated estimate of the minimum . In this way the size of is determined at each iteration.

The linear predicted sum of squares is calculated as

    

(2-23)  

and the term is obtained by cubicly interpolating the points and . A step length parameter is also obtained from this interpolation, which is the estimated step to the minimum. If is greater than , then is reduced, otherwise it is increased. The justification for this is that the difference between and is a measure of the effectiveness of the Gauss-Newton method and the linearity of the problem. This determines whether to use a direction approaching the steepest descent direction or the Gauss-Newton direction. The formulas for the reduction and increase in , which have been developed through consideration of a large number of test problems, are shown in Figure 2-5, Updating k below.

Figure 2-5: Updating k

Following the update of , a solution of Eq. 2-22 is used to obtain a search direction, . A step length of unity is then taken in the direction , which is followed by a line search procedure similar to that discussed for the unconstrained implementation. The line search procedure ensures that at each major iteration and the method is therefore a descent method.

The implementation has been successfully tested on a large number of nonlinear problems. It has proved to be more robust than the Gauss-Newton method and iteratively more efficient than an unconstrained method. The Levenberg-Marquardt algorithm is the default method used by lsqnonlin. The Gauss-Newton method can be selected by setting the options parameter LevenbergMarquardt to 'off'.


 Gauss-Newton Implementation Constrained Optimization