org.ejml.alg.dense.decomposition.eig.symm
Class SymmetricQREigenHelper

java.lang.Object
  extended by org.ejml.alg.dense.decomposition.eig.symm.SymmetricQREigenHelper

public class SymmetricQREigenHelper
extends 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.

Author:
Peter Abeles

Field Summary
protected  double[] diag
           
protected  EigenvalueSmall eigenSmall
           
protected  int lastExceptional
           
protected  int N
           
protected  int numExceptional
           
protected  int numSplits
           
protected  double[] off
           
protected  DenseMatrix64F Q
           
protected  Random rand
           
protected  int[] splits
           
protected  int steps
           
protected  int x1
           
protected  int x2
           
 
Constructor Summary
SymmetricQREigenHelper()
           
 
Method Summary
 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(DenseMatrix64F 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 Random rand

steps

protected int steps

numExceptional

protected int numExceptional

lastExceptional

protected int lastExceptional

eigenSmall

protected EigenvalueSmall eigenSmall

Q

protected DenseMatrix64F 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

public SymmetricQREigenHelper()
Method Detail

printMatrix

public void printMatrix()

setQ

public void setQ(DenseMatrix64F 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()


Copyright © 2012. All Rights Reserved.