org.ejml.alg.dense.decomposition.eig.watched
Class WatchedDoubleStepQREigen

java.lang.Object
  extended by org.ejml.alg.dense.decomposition.eig.watched.WatchedDoubleStepQREigen

public class WatchedDoubleStepQREigen
extends Object

The double step implicit Eigenvalue decomposition algorithm is fairly complicated and needs to be designed so that it can handle several special cases. To aid in development and debugging this class was created. It allows individual components to be tested and to print out their results. This shows how each step is performed.

Do not use this class to compute the eigenvalues since it is much slower than a non-debug implementation.


Field Summary
 boolean createR
           
 DenseMatrix64F Q
           
 
Constructor Summary
WatchedDoubleStepQREigen()
           
 
Method Summary
 void addComputedEigen2x2(int x1, int x2)
           
 void addEigenAt(int x1)
           
 boolean bulgeDoubleStepQn(int i)
           
 boolean bulgeDoubleStepQn(int i, double a11, double a21, double a31, double threshold, boolean set)
           
 boolean bulgeSingleStepQn(int i)
           
 boolean bulgeSingleStepQn(int i, double a11, double a21, double threshold, boolean set)
           
 boolean createBulgeSingleStep(int x1, double eigenvalue)
           
 void eigen2by2_scale(double a11, double a12, double a21, double a22)
           
 void exceptionalShift(int x1, int x2)
          Perform a shift in a random direction that is of the same magnitude as the elements in the matrix.
 Complex64F[] getEigenvalues()
           
 int getNumberOfEigenvalues()
           
 void implicitDoubleStep(int x1, int x2)
          Performs an implicit double step using the values contained in the lower right hand side of the submatrix for the estimated eigenvector values.
 void incrementSteps()
           
 boolean isReal2x2(int x1, int x2)
           
 boolean isZero(int x1, int x2)
           
 void performImplicitDoubleStep(int x1, int x2, double real, double img)
          Performs an implicit double step given the set of two imaginary eigenvalues provided.
 void performImplicitSingleStep(int x1, int x2, double eigenvalue)
           
 void printSteps()
           
 void setChecks(boolean hessenberg, boolean orthogonal, boolean uncountable)
           
 void setQ(DenseMatrix64F Q)
           
 void setup(DenseMatrix64F A)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

createR

public boolean createR

Q

public DenseMatrix64F Q
Constructor Detail

WatchedDoubleStepQREigen

public WatchedDoubleStepQREigen()
Method Detail

incrementSteps

public void incrementSteps()

setQ

public void setQ(DenseMatrix64F Q)

setChecks

public void setChecks(boolean hessenberg,
                      boolean orthogonal,
                      boolean uncountable)

isZero

public boolean isZero(int x1,
                      int x2)

setup

public void setup(DenseMatrix64F A)

exceptionalShift

public void exceptionalShift(int x1,
                             int x2)
Perform a shift in a random direction that is of the same magnitude as the elements in the matrix.


implicitDoubleStep

public void implicitDoubleStep(int x1,
                               int x2)
Performs an implicit double step using the values contained in the lower right hand side of the submatrix for the estimated eigenvector values.

Parameters:
x1 -
x2 -

performImplicitDoubleStep

public void performImplicitDoubleStep(int x1,
                                      int x2,
                                      double real,
                                      double img)
Performs an implicit double step given the set of two imaginary eigenvalues provided. Since one eigenvalue is the complex conjugate of the other only one set of real and imaginary numbers is needed.

Parameters:
x1 - upper index of submatrix.
x2 - lower index of submatrix.
real - Real component of each of the eigenvalues.
img - Imaginary component of one of the eigenvalues.

performImplicitSingleStep

public void performImplicitSingleStep(int x1,
                                      int x2,
                                      double eigenvalue)

createBulgeSingleStep

public boolean createBulgeSingleStep(int x1,
                                     double eigenvalue)

bulgeDoubleStepQn

public boolean bulgeDoubleStepQn(int i)

bulgeDoubleStepQn

public boolean bulgeDoubleStepQn(int i,
                                 double a11,
                                 double a21,
                                 double a31,
                                 double threshold,
                                 boolean set)

bulgeSingleStepQn

public boolean bulgeSingleStepQn(int i)

bulgeSingleStepQn

public boolean bulgeSingleStepQn(int i,
                                 double a11,
                                 double a21,
                                 double threshold,
                                 boolean set)

eigen2by2_scale

public void eigen2by2_scale(double a11,
                            double a12,
                            double a21,
                            double a22)

getNumberOfEigenvalues

public int getNumberOfEigenvalues()

getEigenvalues

public Complex64F[] getEigenvalues()

addComputedEigen2x2

public void addComputedEigen2x2(int x1,
                                int x2)

isReal2x2

public boolean isReal2x2(int x1,
                         int x2)

addEigenAt

public void addEigenAt(int x1)

printSteps

public void printSteps()


Copyright © 2012. All Rights Reserved.