edu.rit.numeric

## Class NonNegativeLeastSquares

- java.lang.Object
- edu.rit.numeric.NonNegativeLeastSquares

public class NonNegativeLeastSquaresextends Object

Class NonNegativeLeastSquares provides a method for solving a least squares minimization problem with nonnegativity constraints. The`solve()`method finds an approximate solution to the linear system of equations**Ax**=**b**, such that ||**Ax**-**b**||^{2}is minimized, and such that**x**>=**0**. The inputs to and outputs from the`solve()`method are stored in the fields of an instance of class NonNegativeLeastSquares.The Java code is a translation of the Fortran subroutine

`NNLS`from Charles L. Lawson and Richard J. Hanson,*Solving Least Squares Problems*(Society for Industrial and Applied Mathematics, 1995), page 161.

### Field Summary

Fields Modifier and Type Field and Description `double[][]`

**a**The*M*x*N*-element**A**matrix for the least squares problem.`double[]`

**b**The*M*-element**b**vector for the least squares problem.`int[]`

**index**The*N*-element index vector.`int`

**M**The number of rows, typically the number of input data points, in the least squares problem.`int`

**N**The number of columns, typically the number of output parameters, in the least squares problem.`double`

**normsqr**The squared Euclidean norm of the residual vector, ||**Ax**-**b**||^{2}.`int`

**nsetp**The number of elements in the set*P;*that is, the number of positive values (inactive constraints).`double[]`

**x**The*N*-element**x**vector for the least squares problem.

### Constructor Summary

Constructors Constructor and Description **NonNegativeLeastSquares**(int M, int N)Construct a new nonnegative least squares problem of the given size.

### Field Detail

#### M

public final int M

The number of rows, typically the number of input data points, in the least squares problem.

#### N

public final int N

The number of columns, typically the number of output parameters, in the least squares problem.

#### a

public final double[][] a

The*M*x*N*-element**A**matrix for the least squares problem. On input to the`solve()`method,`a`contains the matrix**A**. On output,`a`has been replaced with**QA**, where**Q**is an*M*x*M*-element orthogonal matrix generated during the`solve()`method's execution.

#### b

public final double[] b

The*M*-element**b**vector for the least squares problem. On input to the`solve()`method,`b`contains the vector**b**. On output,`b`has been replaced with**Qb**, where**Q**is an*M*x*M*-element orthogonal matrix generated during the`solve()`method's execution.

#### x

public final double[] x

The*N*-element**x**vector for the least squares problem. On output from the`solve()`method,`x`contains the solution vector**x**.

#### index

public final int[] index

The*N*-element index vector. On output from the`solve()`method:`index[0]`through`index[nsetp-1]`contain the indexes of the elements in**x**that are in set*P,*the set of positive values; that is, the elements that are not forced to be zero (inactive constraints).`index[nsetp]`through`index[N-1]`contain the indexes of the elements in**x**that are in set*Z,*the set of zero values; that is, the elements that are forced to be zero (active constraints).

#### nsetp

public int nsetp

The number of elements in the set*P;*that is, the number of positive values (inactive constraints). An output of the`solve()`method.

#### normsqr

public double normsqr

The squared Euclidean norm of the residual vector, ||**Ax**-**b**||^{2}. An output of the`solve()`method.

### Constructor Detail

#### NonNegativeLeastSquares

public NonNegativeLeastSquares(int M, int N)

Construct a new nonnegative least squares problem of the given size. Fields`M`and`N`are set to the given values. The array fields`a`,`b`,`x`, and`index`are allocated with the proper sizes but are not filled in.- Parameters:
`M`

- Number of rows (input data points) in the least squares problem.`N`

- Number of columns (output parameters) in the least squares problem.- Throws:
`IllegalArgumentException`

- (unchecked exception) Thrown if`M`<= 0 or`N`<= 0.

### Method Detail

#### solve

public void solve()

Solve this least squares minimization problem with nonnegativity constraints. The`solve()`method finds an approximate solution to the linear system of equations**Ax**=**b**, such that ||**Ax**-**b**||^{2}is minimized, and such that**x**>=**0**. On input, the field`a`must be filled in with the matrix**A**and the field`b`must be filled in with the vector**b**for the problem to be solved. On output, the other fields are filled in with the solution as explained in the documentation for each field.- Throws:
`TooManyIterationsException`

- (unchecked exception) Thrown if too many iterations occurred without finding a minimum (more than 3*N*iterations).

**SCaVis 2.2 © jWork.ORG**