**21.1****
****Ordinary Least Squares Methods** (.NET, C#, CSharp, VB, Visual Basic, F#)

**NMath**
includes least squares classes that compute solutions using various methods:
Cholesky factorization, QR decomposition, and singular value decomposition.
The interface is virtually identical for all least squares classes.

**Least Squares Using Cholesky
Factorization**

The Cholesky least squares classes solve least square problems by using the Cholesky factorization to solve the normal equations. The normal equations for the least squares problem are:

where denotes the transpose of a real matrix A or the conjugate transpose of a complex matrix A. If A has full rank, then is symmetric positive definite—the converse is also true—and the Cholesky factorization may be used to solve the normal equations. This method will fail if the matrix A is rank deficient.

Finding least squares solutions using the normal equations is often the best method when speed is the only consideration.

**Least Squares Using QR Decomposition**

The QR decomposition least squares classes solve least squares problems by using a QR decomposition to find the minimal norm solution to the linear system . That is, they find the vector x that minimizes the 2-norm of the residual vector . Matrix A must have more rows than columns, and be of full rank.

Finding least squares solutions via QR decomposition is the "standard" method for least squares problems, and is recommended for general use.

If the matrix A is close to rank-deficient, the QR decomposition method described above has less than ideal stability properties. In such cases, a method based on singular value decomposition is a better choice.