Class QRDecompositionHouseholderTran_FDRM

  • All Implemented Interfaces:
    org.ejml.interfaces.decomposition.DecompositionInterface<org.ejml.data.FMatrixRMaj>, org.ejml.interfaces.decomposition.QRDecomposition<org.ejml.data.FMatrixRMaj>

    public class QRDecompositionHouseholderTran_FDRM
    extends java.lang.Object
    implements org.ejml.interfaces.decomposition.QRDecomposition<org.ejml.data.FMatrixRMaj>

    Householder QR decomposition is rich in operations along the columns of the matrix. This can be taken advantage of by solving for the Q matrix in a column major format to reduce the number of CPU cache misses and the number of copies that are performed.

    See Also:
    QRDecompositionHouseholder_FDRM
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected boolean error  
      protected float gamma  
      protected float[] gammas  
      protected int minLength  
      protected int numCols  
      protected int numRows  
      protected org.ejml.data.FMatrixRMaj QR
      Where the Q and R matrices are stored.
      protected float tau  
      protected float[] v  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void applyQ​(org.ejml.data.FMatrixRMaj A)
      A = Q*A
      void applyTranQ​(org.ejml.data.FMatrixRMaj A)
      A = QT*A
      boolean decompose​(org.ejml.data.FMatrixRMaj A)
      To decompose the matrix 'A' it must have full rank.
      float[] getGammas()  
      org.ejml.data.FMatrixRMaj getQ​(org.ejml.data.FMatrixRMaj Q, boolean compact)
      Computes the Q matrix from the information stored in the QR matrix.
      org.ejml.data.FMatrixRMaj getQR()
      Inner matrix that stores the decomposition
      org.ejml.data.FMatrixRMaj getR​(org.ejml.data.FMatrixRMaj R, boolean compact)
      Returns an upper triangular matrix which is the R in the QR decomposition.
      protected void householder​(int j)
      Computes the householder vector "u" for the first column of submatrix j.
      boolean inputModified()  
      void setExpectedMaxSize​(int numRows, int numCols)  
      protected void updateA​(int w)
      Takes the results from the householder computation and updates the 'A' matrix.

      A = (I - γ*u*uT)A
      • Methods inherited from class java.lang.Object

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

      • QR

        protected org.ejml.data.FMatrixRMaj QR
        Where the Q and R matrices are stored. For speed reasons this is transposed
      • v

        protected float[] v
      • numCols

        protected int numCols
      • numRows

        protected int numRows
      • minLength

        protected int minLength
      • gammas

        protected float[] gammas
      • gamma

        protected float gamma
      • tau

        protected float tau
      • error

        protected boolean error
    • Constructor Detail

      • QRDecompositionHouseholderTran_FDRM

        public QRDecompositionHouseholderTran_FDRM()
    • Method Detail

      • setExpectedMaxSize

        public void setExpectedMaxSize​(int numRows,
                                       int numCols)
      • getQR

        public org.ejml.data.FMatrixRMaj getQR()
        Inner matrix that stores the decomposition
      • getQ

        public org.ejml.data.FMatrixRMaj getQ​(org.ejml.data.FMatrixRMaj Q,
                                              boolean compact)
        Computes the Q matrix from the information stored in the QR matrix. This operation requires about 4(m2n-mn2+n3/3) flops.
        Specified by:
        getQ in interface org.ejml.interfaces.decomposition.QRDecomposition<org.ejml.data.FMatrixRMaj>
        Parameters:
        Q - The orthogonal Q matrix.
      • applyQ

        public void applyQ​(org.ejml.data.FMatrixRMaj A)
        A = Q*A
        Parameters:
        A - Matrix that is being multiplied by Q. Is modified.
      • applyTranQ

        public void applyTranQ​(org.ejml.data.FMatrixRMaj A)
        A = QT*A
        Parameters:
        A - Matrix that is being multiplied by QT. Is modified.
      • getR

        public org.ejml.data.FMatrixRMaj getR​(org.ejml.data.FMatrixRMaj R,
                                              boolean compact)
        Returns an upper triangular matrix which is the R in the QR decomposition.
        Specified by:
        getR in interface org.ejml.interfaces.decomposition.QRDecomposition<org.ejml.data.FMatrixRMaj>
        Parameters:
        R - An upper triangular matrix.
        compact -
      • decompose

        public boolean decompose​(org.ejml.data.FMatrixRMaj A)

        To decompose the matrix 'A' it must have full rank. 'A' is a 'm' by 'n' matrix. It requires about 2n*m2-2m2/3 flops.

        The matrix provided here can be of different dimension than the one specified in the constructor. It just has to be smaller than or equal to it.

        Specified by:
        decompose in interface org.ejml.interfaces.decomposition.DecompositionInterface<org.ejml.data.FMatrixRMaj>
      • inputModified

        public boolean inputModified()
        Specified by:
        inputModified in interface org.ejml.interfaces.decomposition.DecompositionInterface<org.ejml.data.FMatrixRMaj>
      • householder

        protected void householder​(int j)

        Computes the householder vector "u" for the first column of submatrix j. Note this is a specialized householder for this problem. There is some protection against overflow and underflow.

        Q = I - γuuT

        This function finds the values of 'u' and 'γ'.

        Parameters:
        j - Which submatrix to work off of.
      • updateA

        protected void updateA​(int w)

        Takes the results from the householder computation and updates the 'A' matrix.

        A = (I - γ*u*uT)A

        Parameters:
        w - The submatrix.
      • getGammas

        public float[] getGammas()