NonNegativeLeastSquares
edu.rit.numeric

## Class 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 TypeField and Description
`double[][]``a`
The MxN-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.
• ### Method Summary

Methods
Modifier and TypeMethod and Description
`void``solve()`
Solve this least squares minimization problem with nonnegativity constraints.
• ### Methods inherited from class java.lang.Object

`equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`
• ### 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 MxN-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 MxM-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 MxM-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 3N iterations).