Class EigenPowerMethod_DDRM

java.lang.Object
org.ejml.dense.row.decomposition.eig.EigenPowerMethod_DDRM

public class EigenPowerMethod_DDRM extends Object

The power method is an iterative method that can be used to find dominant eigen vector in a matrix. Computing Anq for larger and larger values of n, where q is a vector. Eventually the dominant (if there is any) eigen vector will "win".

Shift implementations find the eigen value of the matrix B=A-pI instead. This matrix has the same eigen vectors, but can converge much faster if p is chosen wisely.

See section 5.3 in "Fundamentals of Matrix Computations" Second Edition, David S. Watkins.

WARNING: These functions have well known conditions where they will not converge or converge very slowly and are only used in special situations in practice. I have also seen it converge to none dominant eigen vectors.

  • Constructor Details

    • EigenPowerMethod_DDRM

      public EigenPowerMethod_DDRM(int size)
      Parameters:
      size - The size of the matrix which can be processed.
  • Method Details

    • setSeed

      public void setSeed(DMatrixRMaj seed)
      Sets the value of the vector to use in the start of the iterations.
      Parameters:
      seed - The initial seed vector in the iteration.
    • setOptions

      public void setOptions(int maxIterations, double tolerance)
    • computeDirect

      public boolean computeDirect(DMatrixRMaj A)
      This method computes the eigen vector with the largest eigen value by using the direct power method. This technique is the easiest to implement, but the slowest to converge. Works only if all the eigenvalues are real.
      Parameters:
      A - The matrix. Not modified.
      Returns:
      If it converged or not.
    • computeShiftDirect

      public boolean computeShiftDirect(DMatrixRMaj A, double alpha)
      Computes the most dominant eigen vector of A using a shifted matrix. The shifted matrix is defined as B = A - αI and can converge faster if α is chosen wisely. In general it is easier to choose a value for α that will converge faster with the shift-invert strategy than this one.
      Parameters:
      A - The matrix.
      alpha - Shifting factor.
      Returns:
      If it converged or not.
    • computeShiftInvert

      public boolean computeShiftInvert(DMatrixRMaj A, double alpha)
      Computes the most dominant eigen vector of A using an inverted shifted matrix. The inverted shifted matrix is defined as B = (A - αI)-1 and can converge faster if α is chosen wisely.
      Parameters:
      A - An invertible square matrix matrix.
      alpha - Shifting factor.
      Returns:
      If it converged or not.
    • getEigenVector

      public DMatrixRMaj getEigenVector()