public class EigenvalueDecomposition
extends java.lang.Object
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.times(D.timesTranspose(V)) and V.timesTranspose(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.times(V) equals V.times(D). The matrix V may be badly conditioned, or even singular, so the validity of the equation A = V*D*inverse(V) depends upon V.cond().
Modifier and Type | Field and Description |
---|---|
private double[] |
d
Arrays for internal storage of eigenvalues.
|
private double[] |
e
Arrays for internal storage of eigenvalues.
|
private double[][] |
H
Array for internal storage of nonsymmetric Hessenberg form.
|
private int |
n
Row and column dimension (square matrix).
|
private double[] |
ort
Working storage for nonsymmetric algorithm.
|
private double[][] |
V
Array for internal storage of eigenvectors.
|
Constructor and Description |
---|
EigenvalueDecomposition(double[][] A)
Check for symmetry, then construct the eigenvalue decomposition
|
Modifier and Type | Method and Description |
---|---|
private static void |
cdiv(double xr,
double xi,
double yr,
double yi,
double[] buf,
int off)
Complex scalar division, writing into buf[off++]
|
double[][] |
getD()
Return the block diagonal eigenvalue matrix
|
double[] |
getImagEigenvalues()
Return the imaginary parts of the eigenvalues
|
double[] |
getRealEigenvalues()
Return the real parts of the eigenvalues
|
double[][] |
getV()
Return the eigenvector matrix
|
private void |
hqr2()
Nonsymmetric reduction from Hessenberg to real Schur form.
|
private void |
hqr2BacksubstituteComplex(int n,
double p,
double q,
double norm) |
private void |
hqr2BacksubstituteReal(int n,
double p,
double norm) |
private void |
hqr2BackTransformation(int nn,
int low,
int high)
Back transformation to get eigenvectors of original matrix.
|
private static void |
modifyQP(double[] Hi,
int n,
double p,
double q) |
private static void |
modifyQR(double[] Hi,
int k,
boolean notlast,
double q,
double r,
double x,
double y,
double z) |
private void |
orthes()
Nonsymmetric reduction to Hessenberg form.
|
private void |
sortEigen() |
private void |
tql2()
Symmetric tridiagonal QL algorithm.
|
private double |
tql2ComputeImplicitShift(int l) |
private void |
tql2ImplicitQL(int l,
int m,
double dl1) |
private void |
tred2()
Symmetric Householder reduction to tridiagonal form.
|
private void |
tred2AccumulateTransformations() |
private final int n
private double[] d
private double[] e
private double[][] V
private double[][] H
private double[] ort
public EigenvalueDecomposition(double[][] A)
A
- Square matrixprivate void tred2()
private void tred2AccumulateTransformations()
private void tql2()
private double tql2ComputeImplicitShift(int l)
private void tql2ImplicitQL(int l, int m, double dl1)
private void sortEigen()
private void orthes()
private static void cdiv(double xr, double xi, double yr, double yi, double[] buf, int off)
private void hqr2()
private static void modifyQP(double[] Hi, int n, double p, double q)
private static void modifyQR(double[] Hi, int k, boolean notlast, double q, double r, double x, double y, double z)
private void hqr2BacksubstituteReal(int n, double p, double norm)
private void hqr2BacksubstituteComplex(int n, double p, double q, double norm)
private void hqr2BackTransformation(int nn, int low, int high)
public double[][] getV()
public double[] getRealEigenvalues()
public double[] getImagEigenvalues()
public double[][] getD()
Copyright © 2019 ELKI Development Team. License information.