Class QRDecompositionHouseholderTran_CDRM

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

@Generated("org.ejml.dense.row.decompose.qr.QRDecompositionHouseholderTran_ZDRM") public class QRDecompositionHouseholderTran_CDRM extends Object implements QRDecomposition<CMatrixRMaj>

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:
  • Field Details

    • QR

      protected CMatrixRMaj 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 Complex_F32 tau
    • error

      protected boolean error
  • Constructor Details

    • QRDecompositionHouseholderTran_CDRM

      public QRDecompositionHouseholderTran_CDRM()
  • Method Details

    • setExpectedMaxSize

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

      public CMatrixRMaj getQR()
      Inner matrix that stores the decomposition
    • getQ

      public CMatrixRMaj getQ(@Nullable @Nullable 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 QRDecomposition<CMatrixRMaj>
      Parameters:
      Q - The orthogonal Q matrix.
      compact - If true an m by n matrix is created, otherwise n by n.
      Returns:
      The Q matrix.
    • applyQ

      public void applyQ(CMatrixRMaj A)
      A = Q*A
      Parameters:
      A - Matrix that is being multiplied by Q. Is modified.
    • applyTranQ

      public void applyTranQ(CMatrixRMaj A)
      A = QH*A
      Parameters:
      A - Matrix that is being multiplied by QT. Is modified.
    • getR

      public CMatrixRMaj getR(@Nullable @Nullable CMatrixRMaj R, boolean compact)
      Returns an upper triangular matrix which is the R in the QR decomposition.
      Specified by:
      getR in interface QRDecomposition<CMatrixRMaj>
      Parameters:
      R - An upper triangular matrix.
      compact - If true only the upper triangular elements are set
      Returns:
      The R matrix.
    • decompose

      public boolean decompose(CMatrixRMaj 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 DecompositionInterface<CMatrixRMaj>
      Parameters:
      A - The matrix which is being decomposed. Modification is implementation dependent.
      Returns:
      Returns if it was able to decompose the matrix.
    • inputModified

      public boolean inputModified()
      Description copied from interface: DecompositionInterface
      Checks if the input matrix to DecompositionInterface.decompose(org.ejml.data.Matrix) is modified during the decomposition process.
      Specified by:
      inputModified in interface DecompositionInterface<CMatrixRMaj>
      Returns:
      true if the input matrix to decompose() is modified.
    • 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.
    • updateA

      protected void updateA(int w)

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

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

      Parameters:
      w - The submatrix.
    • getGammas

      public float[] getGammas()