public class QRDecompositionHouseholderTran extends Object implements QRDecomposition<DenseMatrix64F>
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.
QRDecompositionHouseholder| Modifier and Type | Field and Description |
|---|---|
protected boolean |
error |
protected double |
gamma |
protected double[] |
gammas |
protected int |
minLength |
protected int |
numCols |
protected int |
numRows |
protected DenseMatrix64F |
QR
Where the Q and R matrices are stored.
|
protected double |
tau |
protected double[] |
v |
| Constructor and Description |
|---|
QRDecompositionHouseholderTran() |
| Modifier and Type | Method and Description |
|---|---|
void |
applyQ(DenseMatrix64F A)
A = Q*A
|
void |
applyTranQ(DenseMatrix64F A)
A = QT*A
|
boolean |
decompose(DenseMatrix64F A)
To decompose the matrix 'A' it must have full rank.
|
double[] |
getGammas() |
DenseMatrix64F |
getQ(DenseMatrix64F Q,
boolean compact)
Computes the Q matrix from the information stored in the QR matrix.
|
DenseMatrix64F |
getQR()
Inner matrix that stores the decomposition
|
DenseMatrix64F |
getR(DenseMatrix64F 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()
Is the input matrix to
DecompositionInterface.decompose(org.ejml.data.Matrix64F) is modified during
the decomposition process. |
void |
setExpectedMaxSize(int numRows,
int numCols) |
protected void |
updateA(int w)
Takes the results from the householder computation and updates the 'A' matrix.
A = (I - γ*u*uT)A |
protected DenseMatrix64F QR
protected double[] v
protected int numCols
protected int numRows
protected int minLength
protected double[] gammas
protected double gamma
protected double tau
protected boolean error
public void setExpectedMaxSize(int numRows,
int numCols)
public DenseMatrix64F getQR()
public DenseMatrix64F getQ(DenseMatrix64F Q, boolean compact)
getQ in interface QRDecomposition<DenseMatrix64F>Q - The orthogonal Q matrix.compact - If true an m by n matrix is created, otherwise n by n.public void applyQ(DenseMatrix64F A)
A - Matrix that is being multiplied by Q. Is modified.public void applyTranQ(DenseMatrix64F A)
A - Matrix that is being multiplied by QT. Is modified.public DenseMatrix64F getR(DenseMatrix64F R, boolean compact)
getR in interface QRDecomposition<DenseMatrix64F>R - An upper triangular matrix.compact - public boolean decompose(DenseMatrix64F 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.
decompose in interface DecompositionInterface<DenseMatrix64F>A - The matrix which is being decomposed. Modification is implementation dependent.public boolean inputModified()
DecompositionInterfaceDecompositionInterface.decompose(org.ejml.data.Matrix64F) is modified during
the decomposition process.inputModified in interface DecompositionInterface<DenseMatrix64F>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 - γuuT
This function finds the values of 'u' and 'γ'.
j - Which submatrix to work off of.protected void updateA(int w)
Takes the results from the householder computation and updates the 'A' matrix.
A = (I - γ*u*uT)A
w - The submatrix.public double[] getGammas()
Copyright © 2013. All Rights Reserved.