Class EigenvalueDecomposition
java.lang.Object
cern.colt.matrix.linalg.EigenvalueDecomposition
- All Implemented Interfaces:
Serializable
Eigenvalues and eigenvectors of a real matrix A.
If A is symmetric, then A = V*D*V' where the eigenvalue matrix D is diagonal and the eigenvector matrix V is orthogonal. I.e. A = V.mult(D.mult(transpose(V))) and V.mult(transpose(V)) equals the identity matrix.
If A is not symmetric, then the eigenvalue matrix D is block diagonal with the real eigenvalues in 1-by-1 blocks and any complex eigenvalues, lambda + i*mu, in 2-by-2 blocks, [lambda, mu; -mu, lambda]. The columns of V represent the eigenvectors in the sense that A*V = V*D, i.e. A.mult(V) equals V.mult(D). The matrix V may be badly conditioned, or even singular, so the validity of the equation A = V*D*inverse(V) depends upon Algebra.cond(V).
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate doubleprivate doubleprivate double[]Arrays for internal storage of eigenvalues.private double[]Arrays for internal storage of eigenvalues.private double[][]Array for internal storage of nonsymmetric Hessenberg form.private booleanSymmetry flag.private intRow and column dimension (square matrix).private double[]Working storage for nonsymmetric algorithm.(package private) static final longprivate double[][]Array for internal storage of eigenvectors. -
Constructor Summary
ConstructorsConstructorDescriptionConstructs and returns a new eigenvalue decomposition object; The decomposed matrices can be retrieved via instance methods of the returned decomposition object. -
Method Summary
Modifier and TypeMethodDescriptionprivate voidcdiv(double xr, double xi, double yr, double yi) getD()Returns the block diagonal eigenvalue matrix, D.Returns the imaginary parts of the eigenvalues.Returns the real parts of the eigenvalues.getV()Returns the eigenvector matrix, Vprivate voidhqr2()Nonsymmetric reduction from Hessenberg to real Schur form.private voidorthes()Nonsymmetric reduction to Hessenberg form.toString()Returns a String with (propertyName, propertyValue) pairs.private voidtql2()Symmetric tridiagonal QL algorithm.private voidtred2()Symmetric Householder reduction to tridiagonal form.
-
Field Details
-
serialVersionUID
static final long serialVersionUID- See Also:
-
n
private int nRow and column dimension (square matrix). -
issymmetric
private boolean issymmetricSymmetry flag. -
d
private double[] dArrays for internal storage of eigenvalues. -
e
private double[] eArrays for internal storage of eigenvalues. -
V
private double[][] VArray for internal storage of eigenvectors. -
H
private double[][] HArray for internal storage of nonsymmetric Hessenberg form. -
ort
private double[] ortWorking storage for nonsymmetric algorithm. -
cdivr
private transient double cdivr -
cdivi
private transient double cdivi
-
-
Constructor Details
-
EigenvalueDecomposition
Constructs and returns a new eigenvalue decomposition object; The decomposed matrices can be retrieved via instance methods of the returned decomposition object. Checks for symmetry, then constructs the eigenvalue decomposition.- Parameters:
A- A square matrix.- Throws:
IllegalArgumentException- if A is not square.
-
-
Method Details
-
cdiv
private void cdiv(double xr, double xi, double yr, double yi) -
getD
-
getImagEigenvalues
Returns the imaginary parts of the eigenvalues.- Returns:
- imag(diag(D))
-
getRealEigenvalues
Returns the real parts of the eigenvalues.- Returns:
- real(diag(D))
-
getV
-
hqr2
private void hqr2()Nonsymmetric reduction from Hessenberg to real Schur form. -
orthes
private void orthes()Nonsymmetric reduction to Hessenberg form. -
toString
-
tql2
private void tql2()Symmetric tridiagonal QL algorithm. -
tred2
private void tred2()Symmetric Householder reduction to tridiagonal form.
-