# ?gehd2

Reduces a general square matrix to upper Hessenberg form using an unblocked algorithm.

## Syntax

call sgehd2( n, ilo, ihi, a, lda, tau, work, info )

call dgehd2( n, ilo, ihi, a, lda, tau, work, info )

call cgehd2( n, ilo, ihi, a, lda, tau, work, info )

call zgehd2( n, ilo, ihi, a, lda, tau, work, info )

## Include Files

• Fortran: mkl.fi
• C: mkl.h

## Description

The routine reduces a real/complex general matrix A to upper Hessenberg form H by an orthogonal or unitary similarity transformation `QT*A*Q = H` (for real flavors) or `QH*A*Q = H` (for complex flavors).

The routine does not form the matrix Q explicitly. Instead, Q is represented as a product of elementary reflectors.

## Input Parameters

n

INTEGER The order of the matrix A (`n ≥ 0`).

ilo, ihi

INTEGER. It is assumed that A is already upper triangular in rows and columns `1:ilo -1` and `ihi+1:n`.

If A has been output by ?gebal, then

ilo and ihi must contain the values returned by that routine. Otherwise they should be set to `ilo = 1` and `ihi = n`. Constraint: `1 ≤ ilo ≤ ihi ≤ max(1, n)`.

a, work

REAL for sgehd2

DOUBLE PRECISION for dgehd2

COMPLEX for cgehd2

DOUBLE COMPLEX for zgehd2.

Arrays:

`a (lda,*)` contains the n-by-n matrix A to be reduced. The second dimension of a must be at least `max(1, n)`.

work (n) is a workspace array.

lda

INTEGER. The leading dimension of a; at least `max(1, n)`.

## Output Parameters

a

On exit, the upper triangle and the first subdiagonal of A are overwritten with the upper Hessenberg matrix H and the elements below the first subdiagonal, with the array tau, represent the orthogonal/unitary matrix Q as a product of elementary reflectors. See Application Notes below.

tau

REAL for sgehd2

DOUBLE PRECISION for dgehd2

COMPLEX for cgehd2

DOUBLE COMPLEX for zgehd2.

Array, DIMENSION at least `max (1, n-1)`.

Contains the scalar factors of elementary reflectors. See Application Notes below.

info

INTEGER.

If `info = 0`, the execution is successful.

If info = -i, the i-th parameter had an illegal value.

## Application Notes

The matrix Q is represented as a product of (ihi - ilo) elementary reflectors

`Q = H(ilo)*H(ilo +1)*...*H(ihi -1)`

Each H(i) has the form

`H(i) = I - tau*v*vT` for real flavors, or

`H(i) = I - tau*v*vH` for complex flavors

where tau is a real/complex scalar, and v is a real/complex vector with `v(1:i) = 0`, `v(i+1) = 1` and `v(ihi+1:n) = 0`.

On exit, `v(i+2:ihi)` is stored in `a(i+2:ihi, i)` and tau in `tau(i)`.

The contents of a are illustrated by the following example, with `n = 7`, `ilo = 2` and `ihi = 6`:

where a denotes an element of the original matrix A, h denotes a modified element of the upper Hessenberg matrix H, and vi denotes an element of the vector defining H(i).