Class QR


  • public class QR
    extends java.lang.Object
    For an m-by-n matrix A with m ≥ n, the QR decomposition is an m-by-n orthogonal matrix Q and an n-by-n upper triangular matrix R such that A = Q*R.

    The QR decomposition always exists, even if the matrix does not have full rank. The primary use of the QR decomposition is in the least squares solution of non-square systems of simultaneous linear equations, where isSingular() has to be false.

    QR decomposition is also the basis for a particular eigenvalue algorithm, the QR algorithm.

    Author:
    Haifeng Li
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected DenseMatrix qr
      Array for internal storage of decomposition.
      protected boolean singular
      Indicate if the matrix is singular.
      protected double[] tau
      The diagonal of R for this implementation.
    • Constructor Summary

      Constructors 
      Constructor Description
      QR​(DenseMatrix qr, double[] tau, boolean singular)
      Constructor.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      Cholesky CholeskyOfAtA()
      Returns the Cholesky decomposition of A'A.
      DenseMatrix getQ()
      Returns the orthogonal factor.
      DenseMatrix getR()
      Returns the upper triangular factor.
      boolean isSingular()
      Returns true if the matrix is singular (not full column rank).
      void solve​(double[] b, double[] x)
      Solve the least squares A*x = b.
      void solve​(DenseMatrix B)
      Solve the least squares A * X = B.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • qr

        protected DenseMatrix qr
        Array for internal storage of decomposition.
      • tau

        protected double[] tau
        The diagonal of R for this implementation. For netlib based QR, this is the scales for the reflectors.
      • singular

        protected boolean singular
        Indicate if the matrix is singular.
    • Constructor Detail

      • QR

        public QR​(DenseMatrix qr,
                  double[] tau,
                  boolean singular)
        Constructor.
    • Method Detail

      • isSingular

        public boolean isSingular()
        Returns true if the matrix is singular (not full column rank).
      • CholeskyOfAtA

        public Cholesky CholeskyOfAtA()
        Returns the Cholesky decomposition of A'A.
      • getR

        public DenseMatrix getR()
        Returns the upper triangular factor.
      • getQ

        public DenseMatrix getQ()
        Returns the orthogonal factor.
      • solve

        public void solve​(double[] b,
                          double[] x)
        Solve the least squares A*x = b.
        Parameters:
        b - right hand side of linear system.
        x - the output solution vector that minimizes the L2 norm of A*x - b.
        Throws:
        java.lang.RuntimeException - if matrix is rank deficient.
      • solve

        public void solve​(DenseMatrix B)
        Solve the least squares A * X = B. B will be overwritten with the solution matrix on output.
        Parameters:
        B - right hand side of linear system. B will be overwritten with the solution matrix on output.
        Throws:
        java.lang.RuntimeException - Matrix is rank deficient.