MATLAB Function Reference    
nnls

Nonnegative least squares

Syntax

Description

x = nnls(A,b) solves the system of equations Ax = b in a least squares sense, subject to the constraint that the solution vector x has nonnegative elements: xj > 0, j = 1, 2, ... n . The solution x minimizes subject to x 0.

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 wi 0 when xi = 0 and wi 0 when xi > 0.

[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.


 nextpow2 nnz