MATLAB Function Reference
  Go to function:
    Search    Help Desk 
nnls    Examples   See Also

Nonnegative least squares

NOTE
The name of this function has been changed to lsqnonneg in Release 11 (MATLAB 5.3). While nnls is supported in Release 11, it will be removed in a future release so please begin using lsqnonneg.

Syntax

Description

x = nnls(A,b) solves the system of equations in a least squares sense, subject to the constraint that the solution vector x has nonnegative elements:


. The solution x minimizes subject to .

x = nnls(A,b,tol) solves the system of equations, and specifies a tolerance tol. By default, tol is: max(size(A))*norm(A,1)*eps.

[x,w] = nnls(A,b) also returns the dual vector w, where


and


.

[x,w] = nnls(A,b,tol) solves the system of equations, returns the dual vector w, and specifies a tolerance tol.

Examples

Compare the unconstrained least squares solution to the nnls solution for a 4-by-2 problem:

The solution from nnls does not fit as well, but has no negative components.

Algorithm

The nnls function uses the algorithm described in [1], Chapter 23. The algorithm starts with a set of possible basis vectors, computes the associated dual vector w, and selects the basis vector corresponding to the maximum value in w to swap out of the basis in exchange for another possible candidate, until w 0.

See Also

\       Matrix left division (backslash)

References

[1] Lawson, C. L. and R. J. Hanson, Solving Least Squares Problems, Prentice-Hall, 1974, Chapter 23.



[ Previous | Help Desk | Next ]