# ?sytd2/?hetd2

Reduces a symmetric/Hermitian matrix to real symmetric tridiagonal form by an orthogonal/unitary similarity transformation(unblocked algorithm).

## Syntax

call ssytd2( uplo, n, a, lda, d, e, tau, info )

call dsytd2( uplo, n, a, lda, d, e, tau, info )

call chetd2( uplo, n, a, lda, d, e, tau, info )

call zhetd2( uplo, n, a, lda, d, e, tau, info )

## Description

The routine ?sytd2/?hetd2 reduces a real symmetric/complex Hermitian matrix A to real symmetric tridiagonal form T by an orthogonal/unitary similarity transformation: `QT*A*Q = T` (`QH*A*Q = T` ).

## Input Parameters

uplo

  CHARACTER*1.

  Specifies whether the upper or lower triangular part of the symmetric/Hermitian matrix A is stored:

  = 'U': upper triangular

  = 'L': lower triangular

n

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

a

  REAL for ssytd2

  DOUBLE PRECISION for dsytd2

  COMPLEX for chetd2

  COMPLEX*16 for zhetd2.

  Array, DIMENSION (lda, n).

  On entry, the symmetric/Hermitian matrix A.

  If `uplo = 'U'`, the leading n-by-n upper triangular part of a contains the upper triangular part of the matrix A, and the strictly lower triangular part of a is not referenced.

  If `uplo = 'L'`, the leading n-by-n lower triangular part of a contains the lower triangular part of the matrix A, and the strictly upper triangular part of a is not referenced.

lda

  INTEGER. The leading dimension of the array a. `lda ≥ max(1,n)`.

## Output Parameters

a

  On exit, if `uplo = 'U'`, the diagonal and first superdiagonal of a are overwritten by the corresponding elements of the tridiagonal matrix T, and the elements above the first superdiagonal, with the array tau, represent the orthogonal/unitary matrix Q as a product of elementary reflectors;

  if `uplo = 'L'`, the diagonal and first subdiagonal of a are overwritten by the corresponding elements of the tridiagonal matrix T, and the elements below the first subdiagonal, with the array tau, represent the orthogonal/unitary matrix Q as a product of elementary reflectors.

d

  REAL for ssytd2/chetd2

  DOUBLE PRECISION for dsytd2/zhetd2.

  Array, DIMENSION (n).

  The diagonal elements of the tridiagonal matrix T:

  `d(i) = a(i,i)`.

e

  REAL for ssytd2/chetd2

  DOUBLE PRECISION for dsytd2/zhetd2.

  Array, DIMENSION (n-1).

  The off-diagonal elements of the tridiagonal matrix T:

  e(i) = a(i,i+1) if `uplo = 'U'`,

  e(i) = a(i+1,i) if `uplo = 'L'`.

tau

  REAL for ssytd2

  DOUBLE PRECISION for dsytd2

  COMPLEX for chetd2

  COMPLEX*16 for zhetd2.

  Array, DIMENSION (n).

  The first `n-1` elements contain scalar factors of the elementary reflectors. tau(n) is used as workspace.

info

  INTEGER.

  = 0: successful exit

  < 0: if `info = -i`, the i-th argument had an illegal value.

Parent topic: Auxiliary Routines