## Description

This is the workhorse function for the higher-level
function `fcnnls`

, which implements the fast
nonnegative least-square algorithm for multiple
right-hand-sides from Van Benthem et al. (2004) to
solve the following problem:

min ||Y - X K||_F, s.t. K>=0
where `Y`

and `X`

are two real matrices of
dimension `n x p`

and ```
n
x r
```

respectively, and `|.|_F`

is the
Frobenius norm.

The algorithm is very fast compared to other approaches,
as it is optimised for handling multiple right-hand
sides.

## Usage

.fcnnls(x, y, verbose = FALSE, pseudo = FALSE, eps = 0)

## Arguments

- x
- the coefficient matrix
- y
- the target matrix to be approximated by
```
X
K
```

.
- verbose
- logical that indicates if log messages
should be shown.
- pseudo
- By default (
`pseudo=FALSE`

) the
algorithm uses Gaussian elimination to solve the
successive internal linear problems, using the
`solve`

function. If `pseudo=TRUE`

the
algorithm uses Moore-Penrose generalized
`pseudoinverse`

from the
`corpcor`

package instead of solve.
- eps
- threshold for considering entries as
nonnegative. This is an experimental parameter, and it is
recommended to leave it at 0.

## Value

A list with the following elements:

coefthe fitted coefficient matrix.
Psetthe set of passive constraints, as a logical
matrix of the same size as `K`

that indicates which
element is positive.

## References

Van Benthem M and Keenan MR (2004). "Fast algorithm for
the solution of large-scale non-negativity-constrained
least squares problems." _Journal of Chemometrics_,
*18*(10), pp. 441-450. ISSN 0886-9383, , .