Package com.imsl.math

Class BoundedVariableLeastSquares

java.lang.Object
com.imsl.math.BoundedVariableLeastSquares
All Implemented Interfaces:
Serializable, Cloneable

public class BoundedVariableLeastSquares extends Object implements Serializable, Cloneable
Solve a linear least-squares problem with bounds on the variables. BoundedVariableLeastSquares solves the least-squares problem $$\min_x \| Ax-b\|^2$$ subject to the conditions $$\alpha_k \le x_k \le \beta_k$$ for all k.

This algorithm is a generalization of NonNegativeLeastSquares, that solves the least-squares problem, Ax = b, subject to all \(x_j \ge 0\). NonNegativeLeastSquares is based on the subroutine NNLS which appeared in Lawson and Hanson (1974). The additional work on bounded variable least squares was published in a later reprint (Lawson and Hanson, 1995).

See Also:
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static class 
    Maximum number of iterations exceeded.
  • Constructor Summary

    Constructors
    Constructor
    Description
    BoundedVariableLeastSquares(double[][] a, double[] b, double[] lowerBound, double[] upperBound)
    Construct a new BoundedVariableLeastSquares instance to solve Ax-b subject to bounds on the variables.
  • Method Summary

    Modifier and Type
    Method
    Description
    double[]
    Returns the dual solution vector, w.
    int
    Returns the number of iterations used to find the solution.
    double
    Returns the euclidean norm of the residual vector, \(\|Ax-b\|^2\).
    double[]
    Returns the solution to the problem.
    void
    setMaxIterations(int maxIterations)
    Sets the maximum number of iterations.
    void
    setTolerance(double tolerance)
    Sets the internal tolerance used to determine the relative linear dependence of a column vector for a variable moved from its initial value.
    void
    Find the solution x to the problem for the current constraints.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • BoundedVariableLeastSquares

      public BoundedVariableLeastSquares(double[][] a, double[] b, double[] lowerBound, double[] upperBound)
      Construct a new BoundedVariableLeastSquares instance to solve Ax-b subject to bounds on the variables. Each upper bound must be greater than or equal to the corresponding lower bound.
      Parameters:
      a - the double input matrix.
      b - a double array of length a.length.
      lowerBound - a double array of length n containing lower bounds. Use Double.NEGATIVE_INFINITY for variables which are not bounded below.
      upperBound - a double array of length n containing upper bounds. Use Double.POSITIVE_INFINITY for variables which are not bounded above.
  • Method Details

    • solve

      Find the solution x to the problem for the current constraints.
      Throws:
      BoundedVariableLeastSquares.TooManyIterException
    • setMaxIterations

      public void setMaxIterations(int maxIterations)
      Sets the maximum number of iterations.
      Parameters:
      maxIterations - an int specifying the maximum number of iterations. The default is three times a[0].length.
    • setTolerance

      public void setTolerance(double tolerance)
      Sets the internal tolerance used to determine the relative linear dependence of a column vector for a variable moved from its initial value.
      Parameters:
      tolerance - a double value specifying the tolerance. The default value is 1.0e-7.
    • getIterations

      public int getIterations()
      Returns the number of iterations used to find the solution.
      Returns:
      an int containing the number of iterations.
    • getSolution

      public double[] getSolution()
      Returns the solution to the problem.
      Returns:
      a double array containing the solution.
    • getDualSolution

      public double[] getDualSolution()
      Returns the dual solution vector, w. If \(x_j\) is at neither its upper nor lower bound then \(w_j=0\). If \(x_j\) is at its lower bound then \(w_j \le{0}\). If \(x_j\) is at its upper bound then \(w_j\ge{0}\). If the upper and lower bound for the j -th variable are equal, fixing the value of \(x_j\), then the value of \(w_j\) is arbitrary.
      Returns:
      a double array containing the dual solution vector, w.
    • getResidualNorm

      public double getResidualNorm()
      Returns the euclidean norm of the residual vector, \(\|Ax-b\|^2\).
      Returns:
      a double containing the euclidean norm of the residual vector.