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
RealMatrixargument, 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
- Version:
- $Revision: 1002040 $ $Date: 2010-09-28 09:18:31 +0200 (mar. 28 sept. 2010) $
-
-
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 RealMatrixgetD()Returns the block diagonal matrix D of the decomposition.doublegetDeterminant()Return the determinant of the matrixRealVectorgetEigenvector(int i)Returns a copy of the ith eigenvector of the original matrix.doublegetImagEigenvalue(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.doublegetRealEigenvalue(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.DecompositionSolvergetSolver()Get a solver for finding the A × X = B solution in exact linear sense.RealMatrixgetV()Returns the matrix V of the decomposition.RealMatrixgetVT()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 aConvergenceExceptionif algorithm fails to converge
-
EigenDecompositionImpl
public EigenDecompositionImpl(double[] main, double[] secondary, double splitTolerance) throws InvalidMatrixExceptionCalculates 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 aConvergenceExceptionif 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:
getVin 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:
getDin 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:
getVTin interfaceEigenDecomposition- Returns:
- the transpose of the V matrix
- Throws:
InvalidMatrixException
-
getRealEigenvalues
public double[] getRealEigenvalues() throws InvalidMatrixExceptionReturns a copy of the real parts of the eigenvalues of the original matrix.- Specified by:
getRealEigenvaluesin 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.ArrayIndexOutOfBoundsExceptionReturns the real part of the ith eigenvalue of the original matrix.- Specified by:
getRealEigenvaluein interfaceEigenDecomposition- Parameters:
i- index of the eigenvalue (counting from 0)- Returns:
- real part of the ith eigenvalue of the original matrix
- Throws:
InvalidMatrixExceptionjava.lang.ArrayIndexOutOfBoundsException- See Also:
EigenDecomposition.getD(),EigenDecomposition.getRealEigenvalues(),EigenDecomposition.getImagEigenvalue(int)
-
getImagEigenvalues
public double[] getImagEigenvalues() throws InvalidMatrixExceptionReturns a copy of the imaginary parts of the eigenvalues of the original matrix.- Specified by:
getImagEigenvaluesin 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.ArrayIndexOutOfBoundsExceptionReturns the imaginary part of the ith eigenvalue of the original matrix.- Specified by:
getImagEigenvaluein interfaceEigenDecomposition- Parameters:
i- index of the eigenvalue (counting from 0)- Returns:
- imaginary part of the ith eigenvalue of the original matrix
- Throws:
InvalidMatrixExceptionjava.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:
getEigenvectorin interfaceEigenDecomposition- Parameters:
i- index of the eigenvector (counting from 0)- Returns:
- copy of the ith eigenvector of the original matrix
- Throws:
InvalidMatrixExceptionjava.lang.ArrayIndexOutOfBoundsException- See Also:
EigenDecomposition.getD()
-
getDeterminant
public double getDeterminant()
Return the determinant of the matrix- Specified by:
getDeterminantin 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:
getSolverin interfaceEigenDecomposition- Returns:
- a solver
-
-