de.lmu.ifi.dbs.elki.math.linearalgebra
Class EigenvalueDecomposition

java.lang.Object
  extended by de.lmu.ifi.dbs.elki.math.linearalgebra.EigenvalueDecomposition
All Implemented Interfaces:
Serializable

public class EigenvalueDecomposition
extends Object
implements Serializable

Eigenvalues and eigenvectors of a real matrix.

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().

See Also:
Serialized Form

Field Summary
private  double cdivi
           
private  double cdivr
           
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  boolean issymmetric
          Symmetry flag.
private  int n
          Row and column dimension (square matrix).
private  double[] ort
          Working storage for nonsymmetric algorithm.
private static long serialVersionUID
          Serial version
private  double[][] V
          Array for internal storage of eigenvectors.
 
Constructor Summary
EigenvalueDecomposition(Matrix Arg)
          Check for symmetry, then construct the eigenvalue decomposition
 
Method Summary
private  void cdiv(double xr, double xi, double yr, double yi)
           
 Matrix 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
 Matrix getV()
          Return the eigenvector matrix
private  void hqr2()
           
private  void orthes()
           
private  void tql2()
           
private  void tred2()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

serialVersionUID

private static final long serialVersionUID
Serial version

See Also:
Constant Field Values

n

private int n
Row and column dimension (square matrix).


issymmetric

private boolean issymmetric
Symmetry flag.


d

private double[] d
Arrays for internal storage of eigenvalues.


e

private double[] e
Arrays for internal storage of eigenvalues.


V

private double[][] V
Array for internal storage of eigenvectors.


H

private double[][] H
Array for internal storage of nonsymmetric Hessenberg form.


ort

private double[] ort
Working storage for nonsymmetric algorithm.


cdivr

private transient double cdivr

cdivi

private transient double cdivi
Constructor Detail

EigenvalueDecomposition

public EigenvalueDecomposition(Matrix Arg)
Check for symmetry, then construct the eigenvalue decomposition

Parameters:
Arg - Square matrix
Method Detail

tred2

private void tred2()

tql2

private void tql2()

orthes

private void orthes()

cdiv

private void cdiv(double xr,
                  double xi,
                  double yr,
                  double yi)

hqr2

private void hqr2()

getV

public Matrix getV()
Return the eigenvector matrix

Returns:
V

getRealEigenvalues

public double[] getRealEigenvalues()
Return the real parts of the eigenvalues

Returns:
real(diag(D))

getImagEigenvalues

public double[] getImagEigenvalues()
Return the imaginary parts of the eigenvalues

Returns:
imag(diag(D))

getD

public Matrix getD()
Return the block diagonal eigenvalue matrix

Returns:
D

Release 0.4.0 (2011-09-20_1324)