Class QRDecompositionHouseholderColumn_FDRM
- All Implemented Interfaces:
DecompositionInterface<FMatrixRMaj>,QRDecomposition<FMatrixRMaj>
- Direct Known Subclasses:
QRColPivDecompositionHouseholderColumn_FDRM,QRDecompositionHouseholderColumn_MT_FDRM
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 Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected voidConverts the standard row-major matrix into a column-major vector that is advantageous for this problem.booleanTo decompose the matrix 'A' it must have full rank.float[]getQ(@Nullable FMatrixRMaj Q, boolean compact) Computes the Q matrix from the imformation stored in the QR matrix.float[][]getQR()Returns the combined QR matrix in a 2D array format that is column major.getR(@Nullable FMatrixRMaj 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.booleanChecks if the input matrix toDecompositionInterface.decompose(org.ejml.data.Matrix)is modified during the decomposition process.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 float[][] 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 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 Details
-
QRDecompositionHouseholderColumn_FDRM
public QRDecompositionHouseholderColumn_FDRM()
-
-
Method Details
-
setExpectedMaxSize
public void setExpectedMaxSize(int numRows, int numCols) -
getQR
public float[][] 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
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 interfaceQRDecomposition<FMatrixRMaj>- Parameters:
Q- The orthogonal Q matrix.compact- If true an m by n matrix is created, otherwise n by n.- Returns:
- The Q matrix.
-
getR
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 interfaceQRDecomposition<FMatrixRMaj>- Parameters:
R- Storage for upper triangular matrix.compact- If true then a compact matrix is expected.- Returns:
- The R matrix.
-
decompose
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 interfaceDecompositionInterface<FMatrixRMaj>- 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:DecompositionInterfaceChecks if the input matrix toDecompositionInterface.decompose(org.ejml.data.Matrix)is modified during the decomposition process.- Specified by:
inputModifiedin interfaceDecompositionInterface<FMatrixRMaj>- Returns:
- true if the input matrix to decompose() is modified.
-
convertToColumnMajor
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 float[] getGammas()
-