public class NonNegativeLeastSquares extends Object implements Serializable, Cloneable
NonNegativeLeastSquares
solves the problem
$$\min_x\|Ax-b\|^2$$
subject to the condition \(x \ge 0\).
If a starting point \(x_0\) is provided, those entries of \(x_0\) that are \(\gt0\) are first combined with a descent gradient component. The start point is the origin. When \(x_0\) is not provided the algorithm uses only the gradient to verify that an optimum has been found. The algorithm completes using only the gradient components to reach an optimum. For more information, see Lawson and Hanson (1974).
BoundedVariableLeastSquares
,
Example,
Serialized FormModifier and Type | Class and Description |
---|---|
static class |
NonNegativeLeastSquares.TooManyIterException
Maximum number of iterations has been exceeded.
|
static class |
NonNegativeLeastSquares.TooMuchTimeException
Maximum time allowed for solve is exceeded.
|
Constructor and Description |
---|
NonNegativeLeastSquares(double[][] a,
double[] b)
Construct a new NonNegativeLeastSquares instance to solve Ax-b
where x is a vector of n unknowns.
|
Modifier and Type | Method and Description |
---|---|
double[] |
getDualSolution()
Returns the dual solution vector,
w.
|
int |
getIterations()
Returns the number of iterations used to find the solution.
|
double |
getResidualNorm()
Returns the euclidean norm of the residual vector,
\(\|Ax-b\|^2\).
|
double[] |
getSolution()
Returns the solution to the problem, x.
|
void |
setDualTolerance(double dualTolerance)
Sets the dual tolerance.
|
void |
setGuess(double[] guess)
Sets the initial guess.
|
void |
setMaximumTime(long maximumTime)
Sets the maximum time allowed for the solve step.
|
void |
setMaxIterations(int maxIterations)
Sets the maximum number of iterations.
|
void |
setNormTolerance(double normTolerance)
Sets the residual norm tolerance.
|
void |
setRankTolerance(double rankTolerance)
Sets the tolerance used for the incoming column rank deficient check.
|
void |
solve()
Finds the solution to the problem for the current constraints.
|
public NonNegativeLeastSquares(double[][] a, double[] b)
a
- the double
input matrix.b
- a double
array of length a.length
.public void setMaxIterations(int maxIterations)
maxIterations
- an int
specifying the maximum number of
iterations. The default is three times
a[0].length
.public void setGuess(double[] guess)
guess
- a double
array containing the initial guess.
If set, the guess is used in a two-phase algorithm where the
positive components are matched with positive gradients to
choose an incoming column. If not set, the algorithm uses
only the gradient to verify that an optimum has been found.public void setMaximumTime(long maximumTime)
maximumTime
- a long
value specifying the maximum
time, in milliseconds, to be allowed for the solve
step. If maximumTime
is less than or
equal to zero, then no time
limit is imposed. By default, there is no time limit.public void setRankTolerance(double rankTolerance)
rankTolerance
- a double
value used to check for rank
deficiency. The default value is 2.220e-016.public void setDualTolerance(double dualTolerance)
dualTolerance
- a double
containing the dual tolerance.public void setNormTolerance(double normTolerance)
normTolerance
- a double
containing the residual norm
tolerance. The computation stops if \(
{||\mbox{rnorm}||}^2 \le{\mbox{normTolerance}
\times{||b||}}\), where rnorm is the
residual norm. By default, the value is 0.public void solve() throws NonNegativeLeastSquares.TooManyIterException, NonNegativeLeastSquares.TooMuchTimeException
TooManyIterationsException
- is thrown if the maximum number of
iterations is exceeded.NonNegativeLeastSquares.TooMuchTimeException
- is thrown if the maximum time allowed for
solve is exceeded.NonNegativeLeastSquares.TooManyIterException
public double getResidualNorm()
double
containing the euclidean norm of the
residual vector.public int getIterations()
int
containing the number of iterations.public double[] getSolution()
double
array containing the solution.public double[] getDualSolution()
double
array containing the dual solution vector,
w.Copyright © 2020 Rogue Wave Software. All rights reserved.