Class QRDecompositionHouseholder_CDRM

java.lang.Object
org.ejml.dense.row.decompose.qr.QRDecompositionHouseholder_CDRM
All Implemented Interfaces:
org.ejml.interfaces.decomposition.DecompositionInterface<org.ejml.data.CMatrixRMaj>, org.ejml.interfaces.decomposition.QRDecomposition<org.ejml.data.CMatrixRMaj>

@Generated("org.ejml.dense.row.decompose.qr.QRDecompositionHouseholder_ZDRM")
public class QRDecompositionHouseholder_CDRM
extends Object
implements org.ejml.interfaces.decomposition.QRDecomposition<org.ejml.data.CMatrixRMaj>

This variation of complex QR decomposition uses reflections to compute the Q matrix. Each reflection uses a householder operations, hence its name. To provide a meaningful solution the original matrix must have full rank. This is intended for processing of small to medium matrices.

Both Q and R are stored in the same m by n matrix. Q is not stored directly, instead the u from Qk=(I-γ*u*uH) is stored. Decomposition requires about 2n*m2-2m2/3 flops.

See the QR reflections algorithm described in:
David S. Watkins, "Fundamentals of Matrix Computations" 2nd Edition, 2002

For the most part this is a straight forward implementation. To improve performance on large matrices a column is written to an array and the order of some of the loops has been changed. This will degrade performance noticeably on small matrices. Since it is unlikely that the QR decomposition would be a bottle neck when small matrices are involved only one implementation is provided.

  • Field Summary

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

    Constructors
    Constructor Description
    QRDecompositionHouseholder_CDRM()  
  • Method Summary

    Modifier and Type Method Description
    protected void commonSetup​(org.ejml.data.CMatrixRMaj A)
    This function performs sanity check on the input for decompose and sets up the QR matrix.
    boolean decompose​(org.ejml.data.CMatrixRMaj A)
    In order to decompose the matrix 'A' it must have full rank.
    float[] getGammas()  
    org.ejml.data.CMatrixRMaj getQ​(@Nullable org.ejml.data.CMatrixRMaj Q, boolean compact)
    Computes the Q matrix from the information stored in the QR matrix.
    org.ejml.data.CMatrixRMaj getQR()
    Returns a single matrix which contains the combined values of Q and R.
    org.ejml.data.CMatrixRMaj getR​(@Nullable org.ejml.data.CMatrixRMaj 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)  

    Methods inherited from class java.lang.Object

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

    • QR

      protected org.ejml.data.CMatrixRMaj QR
      Where the Q and R matrices are stored. R is stored in the upper triangular portion and Q on the lower bit. Lower columns are where u is stored. Q_k = (I - gamma_k*u_k*u_k^H).
    • u

      protected float[] u
    • v

      protected float[] v
    • numCols

      protected int numCols
    • numRows

      protected int numRows
    • minLength

      protected int minLength
    • dataQR

      protected float[] dataQR
    • gammas

      protected float[] gammas
    • tau

      protected org.ejml.data.Complex_F32 tau
    • error

      protected boolean error
  • Constructor Details

    • QRDecompositionHouseholder_CDRM

      public QRDecompositionHouseholder_CDRM()
  • Method Details

    • setExpectedMaxSize

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

      public org.ejml.data.CMatrixRMaj getQR()
      Returns a single matrix which contains the combined values of Q and R. This is possible since Q is symmetric and R is upper triangular.
      Returns:
      The combined Q R matrix.
    • getQ

      public org.ejml.data.CMatrixRMaj getQ​(@Nullable @Nullable org.ejml.data.CMatrixRMaj 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.CMatrixRMaj>
      Parameters:
      Q - The orthogonal Q matrix.
    • getR

      public org.ejml.data.CMatrixRMaj getR​(@Nullable @Nullable org.ejml.data.CMatrixRMaj 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.CMatrixRMaj>
      Parameters:
      R - An upper triangular matrix.
    • decompose

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

      In order 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.CMatrixRMaj>
    • inputModified

      public boolean inputModified()
      Specified by:
      inputModified in interface org.ejml.interfaces.decomposition.DecompositionInterface<org.ejml.data.CMatrixRMaj>
    • 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 - γuuH

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

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

      protected void commonSetup​(org.ejml.data.CMatrixRMaj A)
      This function performs sanity check on the input for decompose and sets up the QR matrix.
    • getGammas

      public float[] getGammas()