# HESS

## Purpose:

Computes the Hessenberg form of a square matrix.

## Syntax:

HESS(a)

(p, h) = HESS(a)

 a - A square matrix.

## Returns:

A matrix.

(p, h) = HESS(a) returns a permutation matrix and Hessenberg matrix such that p *^ h *^p' == a.

## Example:

A = {{1, 3,  4},

{5, 6,  7},

{8, 9, 12}}

hess(A) == {{ 1.0,   -4.982,  -0.424},

{-9.434, 17.506,   1.809},

{ 0.0,   -0.19101, 0.49438}}

## Example:

A = {{1, 3,  4},

{5, 6,  7},

{8, 9, 12}}

(p, h) = hess(A)

p  == {{1.0,    0.0,  0.0},

{0.0, -0.530, -0.848},

{0.0, -0.848,  0.530}}

h  == {{ 1.0,   -4.982,  -0.424},

{-9.434, 17.506,   1.809},

{ 0.0,   -0.19101, 0.49438}}

p *^ h *^ p' == {{1, 3,  4},

{5, 6,  7},

{8, 9, 12}}

p' *^ p == {{1, 0, 0},

{0, 1, 0},

{0, 0, 1}}

h is the Hessenberg matrix and p is a unitary diagonal matrix such that p *^ h *^ p' == A and p' *^ p == eye(size(A)).

## Remarks:

If a matrix is an upper Hessenberg, then elements in the matrix below the first subdiagonal are all zero. If the input matrix is Hermitian or symmetric, the Hessenberg matrix is triangular.

See DADiSP/MatrixXL to significantly optimize HESS.