Class QRDecompositionHouseholderColumn_DDRM
- All Implemented Interfaces:
org.ejml.interfaces.decomposition.DecompositionInterface<org.ejml.data.DMatrixRMaj>,org.ejml.interfaces.decomposition.QRDecomposition<org.ejml.data.DMatrixRMaj>
- Direct Known Subclasses:
QRColPivDecompositionHouseholderColumn_DDRM,QRDecompositionHouseholderColumn_MT_DDRM
public class QRDecompositionHouseholderColumn_DDRM
extends java.lang.Object
implements org.ejml.interfaces.decomposition.QRDecomposition<org.ejml.data.DMatrixRMaj>
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_DDRM
-
Field Summary
-
Constructor Summary
Constructors Constructor Description QRDecompositionHouseholderColumn_DDRM() -
Method Summary
Modifier and Type Method Description protected voidconvertToColumnMajor(org.ejml.data.DMatrixRMaj A)Converts the standard row-major matrix into a column-major vector that is advantageous for this problem.booleandecompose(org.ejml.data.DMatrixRMaj A)To decompose the matrix 'A' it must have full rank.double[]getGammas()org.ejml.data.DMatrixRMajgetQ(@Nullable org.ejml.data.DMatrixRMaj Q, boolean compact)Computes the Q matrix from the imformation stored in the QR matrix.double[][]getQR()Returns the combined QR matrix in a 2D array format that is column major.org.ejml.data.DMatrixRMajgetR(@Nullable org.ejml.data.DMatrixRMaj R, boolean compact)Returns an upper triangular matrix which is the R in the QR decomposition.protected voidhouseholder(int j)Computes the householder vector "u" for the first column of submatrix j.booleaninputModified()voidsetExpectedMaxSize(int numRows, int numCols)protected voidupdateA(int w)Takes the results from the householder computation and updates the 'A' matrix.
A = (I - γ*u*uT)A
-
Field Details
-
dataQR
protected double[][] dataQRWhere 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^T). -
v
protected double[] v -
numCols
protected int numCols -
numRows
protected int numRows -
minLength
protected int minLength -
gammas
protected double[] gammas -
gamma
protected double gamma -
tau
protected double tau -
error
protected boolean error
-
-
Constructor Details
-
QRDecompositionHouseholderColumn_DDRM
public QRDecompositionHouseholderColumn_DDRM()
-
-
Method Details
-
setExpectedMaxSize
public void setExpectedMaxSize(int numRows, int numCols) -
getQR
public double[][] getQR()Returns the combined QR matrix in a 2D array format that is column major.- Returns:
- The QR matrix in a 2D matrix column major format. [ column ][ row ]
-
getQ
public org.ejml.data.DMatrixRMaj getQ(@Nullable @Nullable org.ejml.data.DMatrixRMaj Q, boolean compact)Computes the Q matrix from the imformation stored in the QR matrix. This operation requires about 4(m2n-mn2+n3/3) flops.- Specified by:
getQin interfaceorg.ejml.interfaces.decomposition.QRDecomposition<org.ejml.data.DMatrixRMaj>- Parameters:
Q- The orthogonal Q matrix.
-
getR
public org.ejml.data.DMatrixRMaj getR(@Nullable @Nullable org.ejml.data.DMatrixRMaj R, boolean compact)Returns an upper triangular matrix which is the R in the QR decomposition. If compact then the input expected to be size = [min(rows,cols) , numCols] otherwise size = [numRows,numCols].- Specified by:
getRin interfaceorg.ejml.interfaces.decomposition.QRDecomposition<org.ejml.data.DMatrixRMaj>- Parameters:
R- Storage for upper triangular matrix.compact- If true then a compact matrix is expected.
-
decompose
public boolean decompose(org.ejml.data.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:
decomposein interfaceorg.ejml.interfaces.decomposition.DecompositionInterface<org.ejml.data.DMatrixRMaj>
-
inputModified
public boolean inputModified()- Specified by:
inputModifiedin interfaceorg.ejml.interfaces.decomposition.DecompositionInterface<org.ejml.data.DMatrixRMaj>
-
convertToColumnMajor
protected void convertToColumnMajor(org.ejml.data.DMatrixRMaj A)Converts the standard row-major matrix into a column-major vector that is advantageous for this problem.- Parameters:
A- original matrix that is to be decomposed.
-
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 overfloaw 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 double[] getGammas()
-