Least Squares Minimization

MINPACK is a C++ library which solves systems of nonlinear equations, or carries out the least squares minimization of the residual of a set of linear or nonlinear equations.

MINPACK includes software for solving nonlinear equations and nonlinear least squares problems. Five algorithmic paths each include a core subroutine and an easy-to-use driver. The algorithms proceed either from an analytic specification of the Jacobian matrix or directly from the problem functions. The paths include facilities for systems of equations with a banded Jacobian matrix, for least squares problems with a large amount of data, and for checking the consistency of the Jacobian matrix with the functions.

Given a set of N nonlinear equations in N unknowns, F(X) = 0, Powell's method is used to seek a solution X.

Given a set of M nonlinear functions in N unknowns, F(X), the Levenberg-Marquardt method is used to seek an X which minimizes the L2 norm of the residual ||F(X)||.

The user supplies a subroutine to evaluate the nonlinear function; the jacobian matrix dFi(X)/dXj may also be supplied by the user in a subroutine, or approximated by finite differences.


MINPACK is available in a C++ version and a FORTRAN77 version and a FORTRAN90 version.

Related Data and Programs:

LLSQ, a C++ library which solves the simple linear least squares problem of finding the formula of a straight line y=a*x+b which minimizes the root-mean-square error to a set of N data points.

QR_SOLVE, a C++ library which computes the least squares solution of a linear system A*x=b.

TEST_LS, a C++ library which implements linear least squares test problems of the form A*x=b.


  1. Jorge More, Burton Garbow, Kenneth Hillstrom,
    User Guide for MINPACK-1,
    Technical Report ANL-80-74,
    Argonne National Laboratory, 1980.
  2. Jorge More, Danny Sorenson, Burton Garbow, Kenneth Hillstrom,
    The MINPACK Project,
    in Sources and Development of Mathematical Software,
    edited by Wayne Cowell,
    Prentice-Hall, 1984,
    ISBN: 0-13-823501-5,
    LC: QA76.95.S68.

Source Code:

Examples and Tests:

List of Routines:

You can go up one level to the C++ source codes.

Last revised on 06 April 2010.