Class TridiagonalDecompositionHouseholder_DDRM

java.lang.Object
org.ejml.dense.row.decomposition.hessenberg.TridiagonalDecompositionHouseholder_DDRM
All Implemented Interfaces:
org.ejml.interfaces.decomposition.DecompositionInterface<org.ejml.data.DMatrixRMaj>, org.ejml.interfaces.decomposition.TridiagonalSimilarDecomposition<org.ejml.data.DMatrixRMaj>, org.ejml.interfaces.decomposition.TridiagonalSimilarDecomposition_F64<org.ejml.data.DMatrixRMaj>
Direct Known Subclasses:
TridiagonalDecompositionHouseholder_MT_DDRM

public class TridiagonalDecompositionHouseholder_DDRM
extends java.lang.Object
implements org.ejml.interfaces.decomposition.TridiagonalSimilarDecomposition_F64<org.ejml.data.DMatrixRMaj>

Performs a similar tridiagonal decomposition on a square symmetric input matrix. Householder vectors perform the similar operation and the symmetry is taken advantage of for good performance.

Finds the decomposition of a matrix in the form of:

A = O*T*OT

where A is a symmetric m by m matrix, O is an orthogonal matrix, and T is a tridiagonal matrix.

This implementation is based off of the algorithm described in:

David S. Watkins, "Fundamentals of Matrix Computations," Second Edition. Page 349-355

  • Field Summary

    Fields 
    Modifier and Type Field Description
    protected double[] b  
    protected double[] gammas  
    protected int N  
    protected org.ejml.data.DMatrixRMaj QT
    Only the upper right triangle is used.
    protected double[] w  
  • Constructor Summary

    Constructors 
    Constructor Description
    TridiagonalDecompositionHouseholder_DDRM()  
  • Method Summary

    Modifier and Type Method Description
    boolean decompose​(org.ejml.data.DMatrixRMaj A)
    Decomposes the provided symmetric matrix.
    void getDiagonal​(double[] diag, double[] off)  
    org.ejml.data.DMatrixRMaj getQ​(@Nullable org.ejml.data.DMatrixRMaj Q, boolean transposed)
    An orthogonal matrix that has the following property: T = QTAQ
    org.ejml.data.DMatrixRMaj getQT()
    Returns the internal matrix where the decomposed results are stored.
    org.ejml.data.DMatrixRMaj getT​(@Nullable org.ejml.data.DMatrixRMaj T)
    Extracts the tridiagonal matrix found in the decomposition.
    void householderSymmetric​(int row, double gamma)
    Performs the householder operations on left and right and side of the matrix.
    void init​(org.ejml.data.DMatrixRMaj A)
    If needed declares and sets up internal data structures.
    boolean inputModified()  
    protected void rank1UpdateMultL​(org.ejml.data.DMatrixRMaj A, double gamma, int colA0, int w0, int w1)  
    protected void rank1UpdateMultR​(org.ejml.data.DMatrixRMaj A, double gamma, int colA0, int w0, int w1)  

    Methods inherited from class java.lang.Object

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

    • QT

      protected org.ejml.data.DMatrixRMaj QT
      Only the upper right triangle is used. The Tridiagonal portion stores the tridiagonal matrix. The rows store householder vectors.
    • N

      protected int N
    • w

      protected double[] w
    • gammas

      protected double[] gammas
    • b

      protected double[] b
  • Constructor Details

  • Method Details

    • getQT

      public org.ejml.data.DMatrixRMaj getQT()
      Returns the internal matrix where the decomposed results are stored.
    • getDiagonal

      public void getDiagonal​(double[] diag, double[] off)
      Specified by:
      getDiagonal in interface org.ejml.interfaces.decomposition.TridiagonalSimilarDecomposition_F64<org.ejml.data.DMatrixRMaj>
    • getT

      public org.ejml.data.DMatrixRMaj getT​(@Nullable @Nullable org.ejml.data.DMatrixRMaj T)
      Extracts the tridiagonal matrix found in the decomposition.
      Specified by:
      getT in interface org.ejml.interfaces.decomposition.TridiagonalSimilarDecomposition<org.ejml.data.DMatrixRMaj>
      Parameters:
      T - If not null then the results will be stored here. Otherwise a new matrix will be created.
      Returns:
      The extracted T matrix.
    • getQ

      public org.ejml.data.DMatrixRMaj getQ​(@Nullable @Nullable org.ejml.data.DMatrixRMaj Q, boolean transposed)
      An orthogonal matrix that has the following property: T = QTAQ
      Specified by:
      getQ in interface org.ejml.interfaces.decomposition.TridiagonalSimilarDecomposition<org.ejml.data.DMatrixRMaj>
      Parameters:
      Q - If not null then the results will be stored here. Otherwise a new matrix will be created.
      Returns:
      The extracted Q matrix.
    • decompose

      public boolean decompose​(org.ejml.data.DMatrixRMaj A)
      Decomposes the provided symmetric matrix.
      Specified by:
      decompose in interface org.ejml.interfaces.decomposition.DecompositionInterface<org.ejml.data.DMatrixRMaj>
      Parameters:
      A - Symmetric matrix that is going to be decomposed. Not modified.
    • householderSymmetric

      public void householderSymmetric​(int row, double gamma)
      Performs the householder operations on left and right and side of the matrix. QTAQ
      Parameters:
      row - Specifies the submatrix.
      gamma - The gamma for the householder operation
    • init

      public void init​(org.ejml.data.DMatrixRMaj A)
      If needed declares and sets up internal data structures.
      Parameters:
      A - Matrix being decomposed.
    • rank1UpdateMultL

      protected void rank1UpdateMultL​(org.ejml.data.DMatrixRMaj A, double gamma, int colA0, int w0, int w1)
    • rank1UpdateMultR

      protected void rank1UpdateMultR​(org.ejml.data.DMatrixRMaj A, double gamma, int colA0, int w0, int w1)
    • inputModified

      public boolean inputModified()
      Specified by:
      inputModified in interface org.ejml.interfaces.decomposition.DecompositionInterface<org.ejml.data.DMatrixRMaj>