Learn R Programming

limSolve (version 1.4)

nnls: Nonnegative Least Squares

Description

Solves the following inverse problem: $$\min(||Ax-b||^2)$$ subject to $$x>=0$$

Uses subroutine nnls (FORTRAN) from Linpack

Usage

nnls(A, B, tol=sqrt(.Machine$double.eps), verbose=TRUE)

Arguments

A
numeric matrix containing the coefficients of the equality constraints $Ax~=B$; if the columns of A have a names attribute, they will be used to label the output.
B
numeric vector containing the right-hand side of the equality constraints.
tol
tolerance (for singular value decomposition and for the "equality" constraints).
verbose
logical to print nnls error messages.

Value

  • a list containing:
  • Xvector containing the solution of the nonnegative least squares problem.
  • residualNormscalar, the sum of absolute values of residuals of violated inequalities (i.e. sumof x[<0]); should="" be="" zero="" or="" very="" small="" if="" the="" problem="" is="" feasible.<="" description="">
  • solutionNormscalar, the value of the quadratic function at the solution, i.e. the value of $\min(||Ax-b||^2)$.
  • IsErrorlogical, TRUE if an error occurred.
  • typethe string "nnls", such that how the solution was obtained can be traced.

References

Lawson C.L.and Hanson R.J. 1974. Solving Least Squares Problems, Prentice-Hall

Lawson C.L.and Hanson R.J. 1995. Solving Least Squares Problems. SIAM classics in applied mathematics, Philadelphia. (reprint of book)

See Also

ldei, which includes equalities

Examples

Run this code
A <- matrix(nr=2,nc=3,data=c(3,2,2,4,2,1))
B <- c(-4,3)
nnls(A,B)

Run the code above in your browser using DataLab