Class HermHess


public class HermHess extends ComplexHess

Computes the Hessenberg decomposition of a real dense Hermitian matrix.

The Hessenberg decomposition decomposes a given Hermitian matrix \( A \) into the product: \[ A = QHQ^{H} \] where \( Q \) is an orthogonal matrix and \( H \) is a Hermitian 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 HermHess.
  2. Call decompose(CMatrix) to perform the factorization.
  3. Retrieve the resulting matrices using getH() and ComplexUnitaryDecomposition.getQ().
See Also:
  • Field Details

    • enforceHermitian

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

    • HermHess

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

      public HermHess(boolean computeQ)
      Constructs a Hessenberg decomposer for Hermitian matrices.
      Parameters:
      computeQ - Flag indicating if the unitary \( Q \) matrix from the Hessenberg decomposition should be explicitly computed. if true, then the \( Q \) matrix will be computed explicitly.
    • HermHess

      public HermHess(boolean computeQ, boolean enforceHermitian)
      Constructs a Hessenberg decomposer for Hermitian matrices.
      Parameters:
      computeQ - Flag indicating if the unitary \( Q \) matrix from the Hessenberg decomposition should be explicitly computed. if true, then the \( Q \) matrix will be computed explicitly.
      enforceHermitian - Flag indicating if an explicit check should be made to ensure any matrix passed to decompose(CMatrix) is truly Hermitian. if true, an exception will be thrown if the matrix is not Hermitian. If false, the decomposition will proceed under the assumption that the matrix is Hermitian whether it actually is or not. If the matrix is not Hermitian, then the values in the upper triangular portion of the matrix are taken to be the values.
    • HermHess

      public HermHess(boolean computeQ, boolean enforceHermitian, boolean inPlace)
      Constructs a Hessenberg decomposer for Hermitian matrices.
      Parameters:
      computeQ - Flag indicating if the unitary \( Q \) matrix from the Hessenberg decomposition should be explicitly computed. if true, then the \( Q \) matrix will be computed explicitly.
      enforceHermitian - Flag indicating if an explicit check should be made to ensure any matrix passed to decompose(CMatrix) is truly Hermitian. if true, an exception will be thrown if the matrix is not Hermitian. If false, the decomposition will proceed under the assumption that the matrix is Hermitian whether it actually is or not. If the matrix is not Hermitian, 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