Class WatchedDoubleStepQREigen_DDRM

java.lang.Object
org.ejml.dense.row.decomposition.eig.watched.WatchedDoubleStepQREigen_DDRM
Direct Known Subclasses:
WatchedDoubleStepQREigen_MT_DDRM

public class WatchedDoubleStepQREigen_DDRM 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 Details

    • u

      protected DMatrixRMaj u
    • gamma

      protected double gamma
    • _temp

      protected DMatrixRMaj _temp
    • createR

      public boolean createR
    • Q

      @Nullable public @Nullable DMatrixRMaj Q
  • Constructor Details

    • WatchedDoubleStepQREigen_DDRM

      public WatchedDoubleStepQREigen_DDRM()
  • Method Details

    • incrementSteps

      public void incrementSteps()
    • setQ

      public void setQ(@Nullable @Nullable DMatrixRMaj Q)
    • setChecks

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

      public boolean isZero(int x1, int x2)
    • setup

      public void setup(DMatrixRMaj 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.
    • 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 Complex_F64[] getEigenvalues()
    • addComputedEigen2x2

      public void addComputedEigen2x2(int x1, int x2)
    • isReal2x2

      public boolean isReal2x2(int x1, int x2)
    • addEigenAt

      public void addEigenAt(int x1)
    • rank1UpdateMultL

      protected void rank1UpdateMultL(DMatrixRMaj A, double gamma, int colA0, int w0, int w1)
    • rank1UpdateMultR

      protected void rank1UpdateMultR(DMatrixRMaj A, double gamma, int colA0, int w0, int w1)
    • printSteps

      public void printSteps()