org.ejml.alg.dense.decomposition.eig
Class SymmetricQRAlgorithmDecomposition

java.lang.Object
  extended by org.ejml.alg.dense.decomposition.eig.SymmetricQRAlgorithmDecomposition
All Implemented Interfaces:
DecompositionInterface<DenseMatrix64F>, EigenDecomposition<DenseMatrix64F>

public class SymmetricQRAlgorithmDecomposition
extends Object
implements EigenDecomposition<DenseMatrix64F>

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

Author:
Peter Abeles
See Also:
SymmetricQrAlgorithm, TridiagonalDecompositionHouseholder

Constructor Summary
SymmetricQRAlgorithmDecomposition(boolean computeVectors)
           
SymmetricQRAlgorithmDecomposition(TridiagonalSimilarDecomposition<DenseMatrix64F> decomp, boolean computeVectors)
           
 
Method Summary
 boolean decompose(DenseMatrix64F orig)
          Decomposes the matrix using the QR algorithm.
 Complex64F getEigenvalue(int index)
           Returns an eigenvalue as a complex number.
 DenseMatrix64F getEigenVector(int index)
           Used to retrieve real valued eigenvectors.
 int getNumberOfEigenvalues()
          Returns the number of eigenvalues/eigenvectors.
 boolean inputModified()
          Is the input matrix to DecompositionInterface.decompose(org.ejml.data.Matrix64F) is modified during the decomposition process.
 void setComputeVectorsWithValues(boolean computeVectorsWithValues)
           
 void setMaxIterations(int max)
          Used to limit the number of internal QR iterations that the QR algorithm performs.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SymmetricQRAlgorithmDecomposition

public SymmetricQRAlgorithmDecomposition(TridiagonalSimilarDecomposition<DenseMatrix64F> decomp,
                                         boolean computeVectors)

SymmetricQRAlgorithmDecomposition

public SymmetricQRAlgorithmDecomposition(boolean computeVectors)
Method Detail

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: EigenDecomposition
Returns the number of eigenvalues/eigenvectors. This is the matrix's dimension.

Specified by:
getNumberOfEigenvalues in interface EigenDecomposition<DenseMatrix64F>
Returns:
number of eigenvalues/eigenvectors.

getEigenvalue

public Complex64F getEigenvalue(int index)
Description copied from interface: EigenDecomposition

Returns 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:
getEigenvalue in interface EigenDecomposition<DenseMatrix64F>
Parameters:
index - Index of the eigenvalue eigenvector pair.
Returns:
An eigenvalue.

getEigenVector

public DenseMatrix64F getEigenVector(int index)
Description copied from interface: EigenDecomposition

Used to retrieve real valued eigenvectors. If an eigenvector is associated with a complex eigenvalue then null is returned instead.

Specified by:
getEigenVector in interface EigenDecomposition<DenseMatrix64F>
Parameters:
index - Index of the eigenvalue eigenvector pair.
Returns:
If the associated eigenvalue is real then an eigenvector is returned, null otherwise.

decompose

public boolean decompose(DenseMatrix64F orig)
Decomposes the matrix using the QR algorithm. Care was taken to minimize unnecessary memory copying and cache skipping.

Specified by:
decompose in interface DecompositionInterface<DenseMatrix64F>
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: DecompositionInterface
Is the input matrix to DecompositionInterface.decompose(org.ejml.data.Matrix64F) is modified during the decomposition process.

Specified by:
inputModified in interface DecompositionInterface<DenseMatrix64F>
Returns:
true if the input matrix to decompose() is modified.


Copyright © 2012. All Rights Reserved.