Class EigenDecompositionImpl
- java.lang.Object
-
- org.apache.commons.math.linear.EigenDecompositionImpl
-
- All Implemented Interfaces:
EigenDecomposition
public class EigenDecompositionImpl extends java.lang.Object implements EigenDecomposition
Calculates the eigen decomposition of a real symmetric matrix.The eigen decomposition of matrix A is a set of two matrices: V and D such that A = V D VT. A, V and D are all m × m matrices.
As of 2.0, this class supports only symmetric matrices, and hence computes only real realEigenvalues. This implies the D matrix returned by
getD()
is always diagonal and the imaginary values returnedgetImagEigenvalue(int)
andgetImagEigenvalues()
are always null.When called with a
RealMatrix
argument, this implementation only uses the upper part of the matrix, the part below the diagonal is not accessed at all.This implementation is based on the paper by A. Drubrulle, R.S. Martin and J.H. Wilkinson 'The Implicit QL Algorithm' in Wilksinson and Reinsch (1971) Handbook for automatic computation, vol. 2, Linear algebra, Springer-Verlag, New-York
- Since:
- 2.0
-
-
Constructor Summary
Constructors Constructor Description EigenDecompositionImpl(double[] main, double[] secondary, double splitTolerance)
Calculates the eigen decomposition of the symmetric tridiagonal matrix.EigenDecompositionImpl(RealMatrix matrix, double splitTolerance)
Calculates the eigen decomposition of the given symmetric matrix.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description RealMatrix
getD()
Returns the block diagonal matrix D of the decomposition.double
getDeterminant()
Return the determinant of the matrixRealVector
getEigenvector(int i)
Returns a copy of the ith eigenvector of the original matrix.double
getImagEigenvalue(int i)
Returns the imaginary part of the ith eigenvalue of the original matrix.double[]
getImagEigenvalues()
Returns a copy of the imaginary parts of the eigenvalues of the original matrix.double
getRealEigenvalue(int i)
Returns the real part of the ith eigenvalue of the original matrix.double[]
getRealEigenvalues()
Returns a copy of the real parts of the eigenvalues of the original matrix.DecompositionSolver
getSolver()
Get a solver for finding the A × X = B solution in exact linear sense.RealMatrix
getV()
Returns the matrix V of the decomposition.RealMatrix
getVT()
Returns the transpose of the matrix V of the decomposition.
-
-
-
Constructor Detail
-
EigenDecompositionImpl
public EigenDecompositionImpl(RealMatrix matrix, double splitTolerance) throws InvalidMatrixException
Calculates the eigen decomposition of the given symmetric matrix.- Parameters:
matrix
- The symmetric matrix to decompose.splitTolerance
- dummy parameter, present for backward compatibility only.- Throws:
InvalidMatrixException
- (wrapping aConvergenceException
if algorithm fails to converge
-
EigenDecompositionImpl
public EigenDecompositionImpl(double[] main, double[] secondary, double splitTolerance) throws InvalidMatrixException
Calculates the eigen decomposition of the symmetric tridiagonal matrix. The Householder matrix is assumed to be the identity matrix.- Parameters:
main
- Main diagonal of the symmetric triadiagonal formsecondary
- Secondary of the tridiagonal formsplitTolerance
- dummy parameter, present for backward compatibility only.- Throws:
InvalidMatrixException
- (wrapping aConvergenceException
if algorithm fails to converge
-
-
Method Detail
-
getV
public RealMatrix getV() throws InvalidMatrixException
Returns the matrix V of the decomposition.V is an orthogonal matrix, i.e. its transpose is also its inverse.
The columns of V are the eigenvectors of the original matrix.
No assumption is made about the orientation of the system axes formed by the columns of V (e.g. in a 3-dimension space, V can form a left- or right-handed system).
- Specified by:
getV
in interfaceEigenDecomposition
- Returns:
- the V matrix
- Throws:
InvalidMatrixException
-
getD
public RealMatrix getD() throws InvalidMatrixException
Returns the block diagonal matrix D of the decomposition.D is a block diagonal matrix.
Real eigenvalues are on the diagonal while complex values are on 2x2 blocks { {real +imaginary}, {-imaginary, real} }.
- Specified by:
getD
in interfaceEigenDecomposition
- Returns:
- the D matrix
- Throws:
InvalidMatrixException
- See Also:
EigenDecomposition.getRealEigenvalues()
,EigenDecomposition.getImagEigenvalues()
-
getVT
public RealMatrix getVT() throws InvalidMatrixException
Returns the transpose of the matrix V of the decomposition.V is an orthogonal matrix, i.e. its transpose is also its inverse.
The columns of V are the eigenvectors of the original matrix.
No assumption is made about the orientation of the system axes formed by the columns of V (e.g. in a 3-dimension space, V can form a left- or right-handed system).
- Specified by:
getVT
in interfaceEigenDecomposition
- Returns:
- the transpose of the V matrix
- Throws:
InvalidMatrixException
-
getRealEigenvalues
public double[] getRealEigenvalues() throws InvalidMatrixException
Returns a copy of the real parts of the eigenvalues of the original matrix.- Specified by:
getRealEigenvalues
in interfaceEigenDecomposition
- Returns:
- a copy of the real parts of the eigenvalues of the original matrix
- Throws:
InvalidMatrixException
- See Also:
EigenDecomposition.getD()
,EigenDecomposition.getRealEigenvalue(int)
,EigenDecomposition.getImagEigenvalues()
-
getRealEigenvalue
public double getRealEigenvalue(int i) throws InvalidMatrixException, java.lang.ArrayIndexOutOfBoundsException
Returns the real part of the ith eigenvalue of the original matrix.- Specified by:
getRealEigenvalue
in interfaceEigenDecomposition
- Parameters:
i
- index of the eigenvalue (counting from 0)- Returns:
- real part of the ith eigenvalue of the original matrix
- Throws:
InvalidMatrixException
java.lang.ArrayIndexOutOfBoundsException
- See Also:
EigenDecomposition.getD()
,EigenDecomposition.getRealEigenvalues()
,EigenDecomposition.getImagEigenvalue(int)
-
getImagEigenvalues
public double[] getImagEigenvalues() throws InvalidMatrixException
Returns a copy of the imaginary parts of the eigenvalues of the original matrix.- Specified by:
getImagEigenvalues
in interfaceEigenDecomposition
- Returns:
- a copy of the imaginary parts of the eigenvalues of the original matrix
- Throws:
InvalidMatrixException
- See Also:
EigenDecomposition.getD()
,EigenDecomposition.getImagEigenvalue(int)
,EigenDecomposition.getRealEigenvalues()
-
getImagEigenvalue
public double getImagEigenvalue(int i) throws InvalidMatrixException, java.lang.ArrayIndexOutOfBoundsException
Returns the imaginary part of the ith eigenvalue of the original matrix.- Specified by:
getImagEigenvalue
in interfaceEigenDecomposition
- Parameters:
i
- index of the eigenvalue (counting from 0)- Returns:
- imaginary part of the ith eigenvalue of the original matrix
- Throws:
InvalidMatrixException
java.lang.ArrayIndexOutOfBoundsException
- See Also:
EigenDecomposition.getD()
,EigenDecomposition.getImagEigenvalues()
,EigenDecomposition.getRealEigenvalue(int)
-
getEigenvector
public RealVector getEigenvector(int i) throws InvalidMatrixException, java.lang.ArrayIndexOutOfBoundsException
Returns a copy of the ith eigenvector of the original matrix.- Specified by:
getEigenvector
in interfaceEigenDecomposition
- Parameters:
i
- index of the eigenvector (counting from 0)- Returns:
- copy of the ith eigenvector of the original matrix
- Throws:
InvalidMatrixException
java.lang.ArrayIndexOutOfBoundsException
- See Also:
EigenDecomposition.getD()
-
getDeterminant
public double getDeterminant()
Return the determinant of the matrix- Specified by:
getDeterminant
in interfaceEigenDecomposition
- Returns:
- determinant of the matrix
-
getSolver
public DecompositionSolver getSolver()
Get a solver for finding the A × X = B solution in exact linear sense.- Specified by:
getSolver
in interfaceEigenDecomposition
- Returns:
- a solver
-
-