Class QRDecompositionHouseholder_D64
- java.lang.Object
-
- org.ejml.alg.dense.decomposition.qr.QRDecompositionHouseholder_D64
-
- All Implemented Interfaces:
- DecompositionInterface<DenseMatrix64F>, QRDecomposition<DenseMatrix64F>
public class QRDecompositionHouseholder_D64 extends java.lang.Object implements QRDecomposition<DenseMatrix64F>
This variation of QR decomposition uses reflections to compute the Q matrix. Each reflection uses a householder operations, hence its name. To provide a meaningful solution the original matrix must have full rank. This is intended for processing of small to medium matrices.
Both Q and R are stored in the same m by n matrix. Q is not stored directly, instead the u from Qk=(I-γ*u*uT) is stored. Decomposition requires about 2n*m2-2m2/3 flops.
See the QR reflections algorithm described in:
David S. Watkins, "Fundamentals of Matrix Computations" 2nd Edition, 2002For the most part this is a straight forward implementation. To improve performance on large matrices a column is writen to an array and the order of some of the loops has been changed. This will degrade performance noticeably on small matrices. Since it is unlikely that the QR decomposition would be a bottle neck when small matrices are involved only one implementation is provided.
-
-
Constructor Summary
Constructors Constructor and Description QRDecompositionHouseholder_D64()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method and Description booleandecompose(DenseMatrix64F A)In order to decompose the matrix 'A' it must have full rank.double[]getGammas()DenseMatrix64FgetQ(DenseMatrix64F Q, boolean compact)Computes the Q matrix from the imformation stored in the QR matrix.DenseMatrix64FgetQR()Returns a single matrix which contains the combined values of Q and R.DenseMatrix64FgetR(DenseMatrix64F R, boolean compact)Returns an upper triangular matrix which is the R in the QR decomposition.booleaninputModified()Is the input matrix toDecompositionInterface.decompose(org.ejml.data.Matrix)is modified during the decomposition process.voidsetExpectedMaxSize(int numRows, int numCols)
-
-
-
Method Detail
-
setExpectedMaxSize
public void setExpectedMaxSize(int numRows, int numCols)
-
getQR
public DenseMatrix64F getQR()
Returns a single matrix which contains the combined values of Q and R. This is possible since Q is symmetric and R is upper triangular.- Returns:
- The combined Q R matrix.
-
getQ
public DenseMatrix64F getQ(DenseMatrix64F 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 interfaceQRDecomposition<DenseMatrix64F>- 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
public DenseMatrix64F getR(DenseMatrix64F R, boolean compact)
Returns an upper triangular matrix which is the R in the QR decomposition.- Specified by:
getRin interfaceQRDecomposition<DenseMatrix64F>- Parameters:
R- An upper triangular matrix.compact-- Returns:
- The R matrix.
-
decompose
public boolean decompose(DenseMatrix64F A)
In order 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<DenseMatrix64F>- 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:DecompositionInterfaceIs the input matrix toDecompositionInterface.decompose(org.ejml.data.Matrix)is modified during the decomposition process.- Specified by:
inputModifiedin interfaceDecompositionInterface<DenseMatrix64F>- Returns:
- true if the input matrix to decompose() is modified.
-
getGammas
public double[] getGammas()
-
-
DMelt 3.0 © DataMelt by jWork.ORG