Class SymmetricQREigenHelper_DDRM


  • public class SymmetricQREigenHelper_DDRM
    extends java.lang.Object
    A helper class for the symmetric matrix implicit QR algorithm for eigenvalue decomposition. Performs most of the basic operations needed to extract eigenvalues and eigenvectors.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      double computeShift()  
      double computeWilkinsonShift()  
      double[] copyDiag​(double[] ret)  
      double[] copyEigenvalues​(double[] ret)  
      double[] copyOff​(double[] ret)  
      protected void createBulge​(int x1, double p, boolean byAngle)
      Performs a similar transform on A-pI
      protected void createBulge2by2​(int x1, double p, boolean byAngle)  
      protected void eigenvalue2by2​(int x1)
      Computes the eigenvalue of the 2 by 2 matrix.
      void exceptionalShift()
      Perform a shift in a random direction that is of the same magnitude as the elements in the matrix.
      int getMatrixSize()  
      void incrementSteps()  
      void init​(double[] diag, double[] off, int numCols)
      Sets up and declares internal data structures.
      protected boolean isZero​(int index)
      Checks to see if the specified off diagonal element is zero using a relative metric.
      boolean nextSplit()
      Tells it to process the submatrix at the next split.
      protected void performImplicitSingleStep​(double lambda, boolean byAngle)  
      void printMatrix()  
      protected void removeBulge​(int x1)  
      protected void removeBulgeEnd​(int x1)
      Rotator to remove the bulge
      void reset​(int N)
      Sets the size of the matrix being decomposed, declares new memory if needed, and sets all helper functions to their initial value.
      void resetSteps()  
      void setQ​(org.ejml.data.DMatrixRMaj q)  
      void setSubmatrix​(int x1, int x2)
      Sets which submatrix is being processed.
      double[] swapDiag​(double[] diag)
      Exchanges the internal array of the diagonal elements for the provided one.
      double[] swapOff​(double[] off)
      Exchanges the internal array of the off diagonal elements for the provided one.
      protected void updateQ​(int m, int n, double c, double s)  
      • Methods inherited from class java.lang.Object

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

      • rand

        protected java.util.Random rand
      • steps

        protected int steps
      • numExceptional

        protected int numExceptional
      • lastExceptional

        protected int lastExceptional
      • Q

        protected org.ejml.data.DMatrixRMaj Q
      • N

        protected int N
      • diag

        protected double[] diag
      • off

        protected double[] off
      • x1

        protected int x1
      • x2

        protected int x2
      • splits

        protected int[] splits
      • numSplits

        protected int numSplits
    • Constructor Detail

      • SymmetricQREigenHelper_DDRM

        public SymmetricQREigenHelper_DDRM()
    • Method Detail

      • printMatrix

        public void printMatrix()
      • setQ

        public void setQ​(org.ejml.data.DMatrixRMaj q)
      • incrementSteps

        public void incrementSteps()
      • init

        public void init​(double[] diag,
                         double[] off,
                         int numCols)
        Sets up and declares internal data structures.
        Parameters:
        diag - Diagonal elements from tridiagonal matrix. Modified.
        off - Off diagonal elements from tridiagonal matrix. Modified.
        numCols - number of columns (and rows) in the matrix.
      • swapDiag

        public double[] swapDiag​(double[] diag)
        Exchanges the internal array of the diagonal elements for the provided one.
      • swapOff

        public double[] swapOff​(double[] off)
        Exchanges the internal array of the off diagonal elements for the provided one.
      • reset

        public void reset​(int N)
        Sets the size of the matrix being decomposed, declares new memory if needed, and sets all helper functions to their initial value.
      • copyDiag

        public double[] copyDiag​(double[] ret)
      • copyOff

        public double[] copyOff​(double[] ret)
      • copyEigenvalues

        public double[] copyEigenvalues​(double[] ret)
      • setSubmatrix

        public void setSubmatrix​(int x1,
                                 int x2)
        Sets which submatrix is being processed.
        Parameters:
        x1 - Lower bound, inclusive.
        x2 - Upper bound, inclusive.
      • isZero

        protected boolean isZero​(int index)
        Checks to see if the specified off diagonal element is zero using a relative metric.
      • performImplicitSingleStep

        protected void performImplicitSingleStep​(double lambda,
                                                 boolean byAngle)
      • updateQ

        protected void updateQ​(int m,
                               int n,
                               double c,
                               double s)
      • createBulge

        protected void createBulge​(int x1,
                                   double p,
                                   boolean byAngle)
        Performs a similar transform on A-pI
      • createBulge2by2

        protected void createBulge2by2​(int x1,
                                       double p,
                                       boolean byAngle)
      • removeBulge

        protected void removeBulge​(int x1)
      • removeBulgeEnd

        protected void removeBulgeEnd​(int x1)
        Rotator to remove the bulge
      • eigenvalue2by2

        protected void eigenvalue2by2​(int x1)
        Computes the eigenvalue of the 2 by 2 matrix.
      • exceptionalShift

        public void exceptionalShift()
        Perform a shift in a random direction that is of the same magnitude as the elements in the matrix.
      • nextSplit

        public boolean nextSplit()
        Tells it to process the submatrix at the next split. Should be called after the current submatrix has been processed.
      • computeShift

        public double computeShift()
      • computeWilkinsonShift

        public double computeWilkinsonShift()
      • getMatrixSize

        public int getMatrixSize()
      • resetSteps

        public void resetSteps()