public class EigenDecompositionImpl extends java.lang.Object implements EigenDecomposition
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 returned
getImagEigenvalue(int)
and getImagEigenvalues()
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
Constructor and 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.
|
Modifier and Type | Method and Description |
---|---|
RealMatrix |
getD()
Returns the block diagonal matrix D of the decomposition.
|
double |
getDeterminant()
Return the determinant of the matrix
|
RealVector |
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.
|
public EigenDecompositionImpl(RealMatrix matrix, double splitTolerance) throws InvalidMatrixException
matrix
- The symmetric matrix to decompose.splitTolerance
- dummy parameter, present for backward compatibility only.InvalidMatrixException
- (wrapping a
ConvergenceException
if algorithm
fails to convergepublic EigenDecompositionImpl(double[] main, double[] secondary, double splitTolerance) throws InvalidMatrixException
main
- Main diagonal of the symmetric triadiagonal formsecondary
- Secondary of the tridiagonal formsplitTolerance
- dummy parameter, present for backward compatibility only.InvalidMatrixException
- (wrapping a
ConvergenceException
if algorithm
fails to convergepublic RealMatrix getV() throws InvalidMatrixException
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).
getV
in interface EigenDecomposition
InvalidMatrixException
public RealMatrix getD() throws InvalidMatrixException
D is a block diagonal matrix.
Real eigenvalues are on the diagonal while complex values are on 2x2 blocks { {real +imaginary}, {-imaginary, real} }.
getD
in interface EigenDecomposition
InvalidMatrixException
EigenDecomposition.getRealEigenvalues()
,
EigenDecomposition.getImagEigenvalues()
public RealMatrix getVT() throws InvalidMatrixException
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).
getVT
in interface EigenDecomposition
InvalidMatrixException
public double[] getRealEigenvalues() throws InvalidMatrixException
getRealEigenvalues
in interface EigenDecomposition
InvalidMatrixException
EigenDecomposition.getD()
,
EigenDecomposition.getRealEigenvalue(int)
,
EigenDecomposition.getImagEigenvalues()
public double getRealEigenvalue(int i) throws InvalidMatrixException, java.lang.ArrayIndexOutOfBoundsException
getRealEigenvalue
in interface EigenDecomposition
i
- index of the eigenvalue (counting from 0)InvalidMatrixException
java.lang.ArrayIndexOutOfBoundsException
EigenDecomposition.getD()
,
EigenDecomposition.getRealEigenvalues()
,
EigenDecomposition.getImagEigenvalue(int)
public double[] getImagEigenvalues() throws InvalidMatrixException
getImagEigenvalues
in interface EigenDecomposition
InvalidMatrixException
EigenDecomposition.getD()
,
EigenDecomposition.getImagEigenvalue(int)
,
EigenDecomposition.getRealEigenvalues()
public double getImagEigenvalue(int i) throws InvalidMatrixException, java.lang.ArrayIndexOutOfBoundsException
getImagEigenvalue
in interface EigenDecomposition
i
- index of the eigenvalue (counting from 0)InvalidMatrixException
java.lang.ArrayIndexOutOfBoundsException
EigenDecomposition.getD()
,
EigenDecomposition.getImagEigenvalues()
,
EigenDecomposition.getRealEigenvalue(int)
public RealVector getEigenvector(int i) throws InvalidMatrixException, java.lang.ArrayIndexOutOfBoundsException
getEigenvector
in interface EigenDecomposition
i
- index of the eigenvector (counting from 0)InvalidMatrixException
java.lang.ArrayIndexOutOfBoundsException
EigenDecomposition.getD()
public double getDeterminant()
getDeterminant
in interface EigenDecomposition
public DecompositionSolver getSolver()
getSolver
in interface EigenDecomposition
"Copyright © 2010 - 2020 Adobe Systems Incorporated. All Rights Reserved"