Class SymmetricQRAlgorithmDecomposition_DDRM
- All Implemented Interfaces:
DecompositionInterface<DMatrixRMaj>,EigenDecomposition<DMatrixRMaj>,EigenDecomposition_F64<DMatrixRMaj>
Computes the eigenvalues and eigenvectors of a real symmetric matrix using the symmetric implicit QR algorithm. Inside each iteration a QR decomposition of Ai-piI is implicitly computed.
This implementation is based on the algorithm is sketched out in:
David S. Watkins, "Fundamentals of Matrix Computations," Second Edition. page 377-385
-
Constructor Summary
ConstructorsConstructorDescriptionSymmetricQRAlgorithmDecomposition_DDRM(boolean computeVectors) SymmetricQRAlgorithmDecomposition_DDRM(TridiagonalSimilarDecomposition_F64<DMatrixRMaj> decomp, boolean computeVectors) -
Method Summary
Modifier and TypeMethodDescriptionbooleandecompose(DMatrixRMaj orig) Decomposes the matrix using the QR algorithm.getEigenvalue(int index) Returns an eigenvalue as a complex number.getEigenVector(int index) Used to retrieve real valued eigenvectors.intReturns the number of eigenvalues/eigenvectors.booleanChecks if the input matrix toDecompositionInterface.decompose(org.ejml.data.Matrix)is modified during the decomposition process.voidsetComputeVectorsWithValues(boolean computeVectorsWithValues) voidsetMaxIterations(int max) Used to limit the number of internal QR iterations that the QR algorithm performs.
-
Constructor Details
-
SymmetricQRAlgorithmDecomposition_DDRM
public SymmetricQRAlgorithmDecomposition_DDRM(TridiagonalSimilarDecomposition_F64<DMatrixRMaj> decomp, boolean computeVectors) -
SymmetricQRAlgorithmDecomposition_DDRM
public SymmetricQRAlgorithmDecomposition_DDRM(boolean computeVectors)
-
-
Method Details
-
setComputeVectorsWithValues
public void setComputeVectorsWithValues(boolean computeVectorsWithValues) -
setMaxIterations
public void setMaxIterations(int max) Used to limit the number of internal QR iterations that the QR algorithm performs. 20 should be enough for most applications.- Parameters:
max- The maximum number of QR iterations it will perform.
-
getNumberOfEigenvalues
public int getNumberOfEigenvalues()Description copied from interface:EigenDecompositionReturns the number of eigenvalues/eigenvectors. This is the matrix's dimension.- Specified by:
getNumberOfEigenvaluesin interfaceEigenDecomposition<DMatrixRMaj>- Returns:
- number of eigenvalues/eigenvectors.
-
getEigenvalue
Description copied from interface:EigenDecomposition_F64Returns an eigenvalue as a complex number. For symmetric matrices the returned eigenvalue will always be a real number, which means the imaginary component will be equal to zero.
NOTE: The order of the eigenvalues is dependent upon the decomposition algorithm used. This means that they may or may not be ordered by magnitude. For example the QR algorithm will returns results that are partially ordered by magnitude, but this behavior should not be relied upon.
- Specified by:
getEigenvaluein interfaceEigenDecomposition_F64<DMatrixRMaj>- Parameters:
index- Index of the eigenvalue eigenvector pair.- Returns:
- An eigenvalue.
-
getEigenVector
Description copied from interface:EigenDecompositionUsed to retrieve real valued eigenvectors. If an eigenvector is associated with a complex eigenvalue then null is returned instead.
- Specified by:
getEigenVectorin interfaceEigenDecomposition<DMatrixRMaj>- Parameters:
index- Index of the eigenvalue eigenvector pair.- Returns:
- If the associated eigenvalue is real then an eigenvector is returned, null otherwise.
-
decompose
Decomposes the matrix using the QR algorithm. Care was taken to minimize unnecessary memory copying and cache skipping.- Specified by:
decomposein interfaceDecompositionInterface<DMatrixRMaj>- Parameters:
orig- The matrix which is being decomposed. Not modified.- Returns:
- true if it decomposed the matrix or false if an error was detected. This will not catch all errors.
-
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<DMatrixRMaj>- Returns:
- true if the input matrix to decompose() is modified.
-