Class EigenvalueDecomposition

  • All Implemented Interfaces:
    java.io.Serializable

    public class EigenvalueDecomposition
    extends java.lang.Object
    implements java.io.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:
    Serialized Form
    • Field Summary

      Fields 
      Modifier and Type Field Description
      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.
      (package private) static long serialVersionUID  
      private double[][] V
      Array for internal storage of eigenvectors.
    • Constructor Summary

      Constructors 
      Constructor Description
      EigenvalueDecomposition​(DoubleMatrix2D A)
      Constructs and returns a new eigenvalue decomposition object; The decomposed matrices can be retrieved via instance methods of the returned decomposition object.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private void cdiv​(double xr, double xi, double yr, double yi)  
      DoubleMatrix2D getD()
      Returns the block diagonal eigenvalue matrix, D.
      DoubleMatrix1D getImagEigenvalues()
      Returns the imaginary parts of the eigenvalues.
      DoubleMatrix1D getRealEigenvalues()
      Returns the real parts of the eigenvalues.
      DoubleMatrix2D getV()
      Returns the eigenvector matrix, V
      private void hqr2()
      Nonsymmetric reduction from Hessenberg to real Schur form.
      private void orthes()
      Nonsymmetric reduction to Hessenberg form.
      java.lang.String toString()
      Returns a String with (propertyName, propertyValue) pairs.
      private void tql2()
      Symmetric tridiagonal QL algorithm.
      private void tred2()
      Symmetric Householder reduction to tridiagonal form.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • 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​(DoubleMatrix2D A)
        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:
        java.lang.IllegalArgumentException - if A is not square.
    • Method Detail

      • cdiv

        private void cdiv​(double xr,
                          double xi,
                          double yr,
                          double yi)
      • getD

        public DoubleMatrix2D getD()
        Returns the block diagonal eigenvalue matrix, D.
        Returns:
        D
      • getImagEigenvalues

        public DoubleMatrix1D getImagEigenvalues()
        Returns the imaginary parts of the eigenvalues.
        Returns:
        imag(diag(D))
      • getRealEigenvalues

        public DoubleMatrix1D getRealEigenvalues()
        Returns the real parts of the eigenvalues.
        Returns:
        real(diag(D))
      • getV

        public DoubleMatrix2D getV()
        Returns the eigenvector matrix, V
        Returns:
        V
      • hqr2

        private void hqr2()
        Nonsymmetric reduction from Hessenberg to real Schur form.
      • orthes

        private void orthes()
        Nonsymmetric reduction to Hessenberg form.
      • toString

        public java.lang.String toString()
        Returns a String with (propertyName, propertyValue) pairs. Useful for debugging or to quickly get the rough picture. For example,
        rank          : 3
        trace         : 0
        
        Overrides:
        toString in class java.lang.Object
      • tql2

        private void tql2()
        Symmetric tridiagonal QL algorithm.
      • tred2

        private void tred2()
        Symmetric Householder reduction to tridiagonal form.