Class SymmHess


public class SymmHess extends RealHess

Computes the Hessenberg decomposition of a real dense symmetric matrix.

The Hessenberg decomposition decomposes a given symmetric matrix \( A \) into the product: \[ A = QHQ^{T} \] where \( Q \) is an orthogonal matrix and \( H \) is a symmetric tri-diagonal matrix (special case of Hessenburg form) which is similar to \( A \) (i.e. has the same eigenvalues)

A matrix \( H \) is in tri-diagonal form if it has all zeros below the first sub-diagonal and above the first super-diagonal.

For example, the following matrix is in symmetric tri-diagonal form where each '\( \times \)' may hold a different value (provided the matrix is symmetric): \[ \begin{bmatrix} \times & \times & 0 & 0 & 0 \\ \times & \times & \times & 0 & 0 \\ 0 & \times & \times & \times & 0 \\ 0 & 0 & \times & \times & \times \\ 0 & 0 & 0 & \times & \times \\ \end{bmatrix} \]

Efficiency Considerations:

  • If the orthogonal matrix \( Q \) is not required, setting computeQ = false in the constructor may improve performance.
  • Support for in-place decomposition to reduce memory usage.

Usage:

The decomposition workflow typically follows these steps:
  1. Instantiate an instance of SymmHess.
  2. Call decompose(Matrix) to perform the factorization.
  3. Retrieve the resulting matrices using getH() and RealUnitaryDecomposition.getQ().
See Also:
  • Field Details

    • enforceSymmetric

      protected boolean enforceSymmetric
      Flag indicating if an explicit check should be made that the matrix to be decomposed is symmetric.
  • Constructor Details

    • SymmHess

      public SymmHess()
      Constructs a Hessenberg decomposer for symmetric matrices. By default, the Householder vectors used in the decomposition will be stored so that the full orthogonal \( Q \) matrix can be formed by calling RealUnitaryDecomposition.getQ().
    • SymmHess

      public SymmHess(boolean computeQ)
      Constructs a Hessenberg decomposer for symmetric matrices.
      Parameters:
      computeQ - Flag indicating if the orthogonal \( Q \) matrix from the Hessenberg decomposition should be explicitly computed. if true, then the \( Q \) matrix will be computed explicitly. If \( Q \) is not needed, setting this to false may yield an increase in performance.
    • SymmHess

      public SymmHess(boolean computeQ, boolean enforceSymmetric)
      Constructs a Hessenberg decomposer for symmetric matrices.
      Parameters:
      computeQ - Flag indicating if the orthogonal \( Q \) matrix from the Hessenberg decomposition should be explicitly computed. if true, then the \( Q \) matrix will be computed explicitly. If \( Q \) is not needed, setting this to false may yield an increase in performance.
      enforceSymmetric - Flag indicating if an explicit check should be made to ensure any matrix passed to decompose(Matrix) is truly symmetric. If true, an exception will be thrown if the matrix is not symmetric. If false, the decomposition will proceed under the assumption that the matrix is symmetric whether it actually is or not. If the matrix is not symmetric, then the values in the upper triangular portion of the matrix are taken to be the values.
    • SymmHess

      public SymmHess(boolean computeQ, boolean enforceSymmetric, boolean inPlace)
      Constructs a Hessenberg decomposer for symmetric matrices.
      Parameters:
      computeQ - Flag indicating if the orthogonal \( Q \) matrix from the Hessenberg decomposition should be explicitly computed. if true, then the \( Q \) matrix will be computed explicitly. If \( Q \) is not needed, setting this to false may yield an increase in performance.
      enforceSymmetric - Flag indicating if an explicit check should be made to ensure any matrix passed to decompose(Matrix) is truly symmetric. If true, an exception will be thrown if the matrix is not symmetric. If false, the decomposition will proceed under the assumption that the matrix is symmetric whether it actually is or not. If the matrix is not symmetric, then the values in the upper triangular portion of the matrix are taken to be the values.
      inPlace - Flag indicating if the decomposition should be done in-place.
      • If true, then the decomposition will be done in place.
      • If false, then the decomposition will be done out-of-place.
  • Method Details