# nnls

## Purpose

Nonnegative least squares.

## Synopsis

    x = nnls(A,b)
    x = nnls(A,b,tol)
    [x,w] = nnls(A,b)
    [x,w] = nnls(A,b,tol)

## Description

`x = nnls(A,b)` solves the system of equations

in a least squares sense, subject to the constraint that the solution vector `x` have nonnegative elements

`x = nnls(A,b,tol)` specifies a tolerance `tol`, that determines when an element is less than 0. By default, `tol` is

    max(size(A))*norm(A,1)*eps

`[x,w] = nnls(...)` returns the dual vector `w`. The elements of `x` and `w` are related by

## Examples

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

    A =
        0.0372    0.2869
        0.6861    0.7071
        0.6233    0.6245
        0.6344    0.6170

    b =
        0.8587
        0.1781
        0.0747
        0.8405

    [A\b nnls(A,b)] =

        -2.5625        0
         3.1106   0.6929

    [norm(A*(a\b)-b) norm(A*nnls(a,b)-b)] =

        0.6677    0.9119

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

## Algorithm

`nnls` 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

    \

## References

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

(c) Copyright 1994 by The MathWorks, Inc.