# scipy.optimize.nnls

scipy.optimize.nnls(A, b, maxiter=None)

  Solve `argmin_x || Ax - b ||_2` for `x>=0`. This is a wrapper for a FORTRAN non-negative least squares solver.

  Parameters
    A ndarray

      Matrix `A` as shown above.

    b ndarray

      Right-hand side vector.

    maxiter: int, optional

      Maximum number of iterations, optional. Default is `3 * A.shape[1]`.

  Returns
    x ndarray

      Solution vector.

    rnorm float

      The residual, `|| Ax-b ||_2`.

  See also

  `lsq_linear`

    Linear least squares with bounds on the variables

  Notes

  The FORTRAN code was published in the book below. The algorithm is an active set method. It solves the KKT (Karush-Kuhn-Tucker) conditions for the non-negative least squares problem.

  References

  Lawson C., Hanson R.J., (1987) Solving Least Squares Problems, SIAM

  Examples

      >>> from scipy.optimize import nnls
      ...
      >>> A = np.array([[1, 0], [1, 0], [0, 1]])
      >>> b = np.array([2, 1, 1])
      >>> nnls(A, b)
      (array([1.5, 1. ]), 0.7071067811865475)

      >>> b = np.array([-1, -1, -1])
      >>> nnls(A, b)
      (array([0., 0.]), 1.7320508075688772)

scipy.optimize.least_squares scipy.optimize.lsq_linear