Class QRColPivDecompositionHouseholderColumn_DDRM

java.lang.Object
org.ejml.dense.row.decomposition.qr.QRDecompositionHouseholderColumn_DDRM
org.ejml.dense.row.decomposition.qr.QRColPivDecompositionHouseholderColumn_DDRM
All Implemented Interfaces:
DecompositionInterface<DMatrixRMaj>, QRDecomposition<DMatrixRMaj>, QRPDecomposition<DMatrixRMaj>, QRPDecomposition_F64<DMatrixRMaj>

public class QRColPivDecompositionHouseholderColumn_DDRM extends QRDecompositionHouseholderColumn_DDRM implements QRPDecomposition_F64<DMatrixRMaj>

Performs QR decomposition with column pivoting. To prevent overflow/underflow the whole matrix is normalized by the max value, but columns are not normalized individually any more. To enable code reuse it extends QRDecompositionHouseholderColumn_DDRM and functions from that class are used whenever possible. Columns are transposed into single arrays, which allow for fast pivots.

Decomposition: A*P = Q*R

Based off the description in "Fundamentals of Matrix Computations", 2nd by David S. Watkins.

  • Field Details

    • pivots

      protected int[] pivots
    • normsCol

      protected double[] normsCol
    • singularThreshold

      protected double singularThreshold
    • rank

      protected int rank
  • Constructor Details

    • QRColPivDecompositionHouseholderColumn_DDRM

      public QRColPivDecompositionHouseholderColumn_DDRM(double singularThreshold)
      Configure parameters.
      Parameters:
      singularThreshold - The singular threshold.
    • QRColPivDecompositionHouseholderColumn_DDRM

      public QRColPivDecompositionHouseholderColumn_DDRM()
  • Method Details

    • setSingularThreshold

      public void setSingularThreshold(double threshold)
      Description copied from interface: QRPDecomposition_F64

      Specifies the threshold used to flag a column as being singular. The specified threshold is relative and will very depending on the system. The default value is UtilEJML.EPS.

      Specified by:
      setSingularThreshold in interface QRPDecomposition_F64<DMatrixRMaj>
      Parameters:
      threshold - Singular threshold.
    • setExpectedMaxSize

      public void setExpectedMaxSize(int numRows, int numCols)
      Overrides:
      setExpectedMaxSize in class QRDecompositionHouseholderColumn_DDRM
    • getQ

      public DMatrixRMaj getQ(@Nullable @Nullable DMatrixRMaj 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<DMatrixRMaj>
      Overrides:
      getQ in class QRDecompositionHouseholderColumn_DDRM
      Parameters:
      Q - The orthogonal Q matrix.
      compact - If true an m by n matrix is created, otherwise n by n.
      Returns:
      The Q matrix.
    • decompose

      public boolean decompose(DMatrixRMaj 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<DMatrixRMaj>
      Overrides:
      decompose in class QRDecompositionHouseholderColumn_DDRM
      Parameters:
      A - The matrix which is being decomposed. Modification is implementation dependent.
      Returns:
      Returns if it was able to decompose the matrix.
    • setupPivotInfo

      protected void setupPivotInfo()
      Sets the initial pivot ordering and compute the F-norm squared for each column
    • updateNorms

      protected void updateNorms(int j)
      Performs an efficient update of each columns' norm
    • swapColumns

      protected void swapColumns(int j)
      Finds the column with the largest normal and makes that the first column
      Parameters:
      j - Current column being inspected
    • householderPivot

      protected boolean householderPivot(int j)

      Computes the householder vector "u" for the first column of submatrix j. The already computed norm is used and checks to see if the matrix is singular at this point.

      Q = I - γuuT

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

      Parameters:
      j - Which submatrix to work off of.
      Returns:
      false if it is degenerate
    • getRank

      public int getRank()
      Description copied from interface: QRPDecomposition
      Returns the rank as determined by the algorithm. This is dependent upon a fixed threshold and might not be appropriate for some applications.
      Specified by:
      getRank in interface QRPDecomposition<DMatrixRMaj>
      Returns:
      Matrix's rank
    • getColPivots

      public int[] getColPivots()
      Description copied from interface: QRPDecomposition
      Ordering of each column after pivoting. The current column i was original at column pivot[i].
      Specified by:
      getColPivots in interface QRPDecomposition<DMatrixRMaj>
      Returns:
      Order of columns.
    • getColPivotMatrix

      public DMatrixRMaj getColPivotMatrix(@Nullable @Nullable DMatrixRMaj P)
      Description copied from interface: QRPDecomposition
      Creates the column pivot matrix.
      Specified by:
      getColPivotMatrix in interface QRPDecomposition<DMatrixRMaj>
      Parameters:
      P - Optional storage for pivot matrix. If null a new matrix will be created.
      Returns:
      The pivot matrix.