org.apache.commons.math.linear
Class EigenDecomposition

java.lang.Object
  extended by org.apache.commons.math.linear.EigenDecomposition

public class EigenDecomposition
extends java.lang.Object

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.

This class is similar in spirit to the EigenvalueDecomposition class from the JAMA library, with the following changes:

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

Since:
2.0 (changed to concrete class in 3.0)
Version:
$Id: EigenDecomposition.java 1177938 2011-10-01 07:57:19Z celestin $
See Also:
MathWorld, Wikipedia

Constructor Summary
EigenDecomposition(double[] main, double[] secondary, double splitTolerance)
          Calculates the eigen decomposition of the symmetric tridiagonal matrix.
EigenDecomposition(RealMatrix matrix, double splitTolerance)
          Calculates the eigen decomposition of the given symmetric matrix.
 
Method Summary
 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.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

EigenDecomposition

public EigenDecomposition(RealMatrix matrix,
                          double splitTolerance)
Calculates the eigen decomposition of the given symmetric matrix.

Parameters:
matrix - Matrix to decompose. It must be symmetric.
splitTolerance - Dummy parameter (present for backward compatibility only).
Throws:
NonSymmetricMatrixException - if the matrix is not symmetric.
MaxCountExceededException - if the algorithm fails to converge.

EigenDecomposition

public EigenDecomposition(double[] main,
                          double[] secondary,
                          double splitTolerance)
Calculates 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 form
secondary - Secondary of the tridiagonal form
splitTolerance - Dummy parameter (present for backward compatibility only).
Throws:
MaxCountExceededException - if the algorithm fails to converge.
Method Detail

getV

public RealMatrix getV()
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).

Returns:
the V matrix

getD

public RealMatrix getD()
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} }.

Returns:
the D matrix
See Also:
getRealEigenvalues(), getImagEigenvalues()

getVT

public RealMatrix getVT()
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).

Returns:
the transpose of the V matrix

getRealEigenvalues

public double[] getRealEigenvalues()
Returns a copy of the real parts of the eigenvalues of the original matrix.

Returns:
a copy of the real parts of the eigenvalues of the original matrix
See Also:
getD(), getRealEigenvalue(int), getImagEigenvalues()

getRealEigenvalue

public double getRealEigenvalue(int i)
Returns the real part of the ith eigenvalue of the original matrix.

Parameters:
i - index of the eigenvalue (counting from 0)
Returns:
real part of the ith eigenvalue of the original matrix
See Also:
getD(), getRealEigenvalues(), getImagEigenvalue(int)

getImagEigenvalues

public double[] getImagEigenvalues()
Returns a copy of the imaginary parts of the eigenvalues of the original matrix.

Returns:
a copy of the imaginary parts of the eigenvalues of the original matrix
See Also:
getD(), getImagEigenvalue(int), getRealEigenvalues()

getImagEigenvalue

public double getImagEigenvalue(int i)
Returns the imaginary part of the ith eigenvalue of the original matrix.

Parameters:
i - index of the eigenvalue (counting from 0)
Returns:
imaginary part of the ith eigenvalue of the original matrix
See Also:
getD(), getImagEigenvalues(), getRealEigenvalue(int)

getEigenvector

public RealVector getEigenvector(int i)
Returns a copy of the ith eigenvector of the original matrix.

Parameters:
i - index of the eigenvector (counting from 0)
Returns:
copy of the ith eigenvector of the original matrix
See Also:
getD()

getDeterminant

public double getDeterminant()
Return the determinant of the matrix

Returns:
determinant of the matrix

getSolver

public DecompositionSolver getSolver()
Get a solver for finding the A × X = B solution in exact linear sense.

Returns:
a solver


Copyright © 2003-2011 The Apache Software Foundation. All Rights Reserved.