# ?laed0

Used by ?stedc. Computes all eigenvalues and corresponding eigenvectors of an unreduced symmetric tridiagonal matrix using the divide and conquer method.

## Syntax

call slaed0( icompq, qsiz, n, d, e, q, ldq, qstore, ldqs, work, iwork, info )

call dlaed0( icompq, qsiz, n, d, e, q, ldq, qstore, ldqs, work, iwork, info )

call claed0( qsiz, n, d, e, q, ldq, qstore, ldqs, rwork, iwork, info )

call zlaed0( qsiz, n, d, e, q, ldq, qstore, ldqs, rwork, iwork, info )

## Description

Real flavors of this routine compute all eigenvalues and (optionally) corresponding eigenvectors of a symmetric tridiagonal matrix using the divide and conquer method.

Complex flavors claed0/zlaed0 compute all eigenvalues of a symmetric tridiagonal matrix which is one diagonal block of those from reducing a dense or band Hermitian matrix and corresponding eigenvectors of the dense or band matrix.

## Input Parameters

icompq

  INTEGER. Used with real flavors only.

  If `icompq = 0`, compute eigenvalues only.

  If `icompq = 1`, compute eigenvectors of original dense symmetric matrix also.

  On entry, the array q must contain the orthogonal matrix used to reduce the original matrix to tridiagonal form.

  If `icompq = 2`, compute eigenvalues and eigenvectors of the tridiagonal matrix.

qsiz

  INTEGER.

  The dimension of the orthogonal/unitary matrix used to reduce the full matrix to tridiagonal form; `qsiz ≥ n` (for real flavors, `qsiz ≥ n` if icompq = 1).

n

  INTEGER. The dimension of the symmetric tridiagonal matrix (`n ≥ 0`).

d, e, rwork

  REAL for single-precision flavors

  DOUBLE PRECISION for double-precision flavors. Arrays:

  d(*) contains the main diagonal of the tridiagonal matrix. The dimension of d must be at least `max(1, n)`.

  e(*) contains the off-diagonal elements of the tridiagonal matrix. The dimension of e must be at least `max(1, n-1)`.

  rwork(*) is a workspace array used in complex flavors only. The dimension of rwork must be at least `(1 +3n+2nlg(n)+3n2)`, where lg(n) = smallest integer k such that `2k ≥ n`.

q, qstore

  REAL for slaed0

  DOUBLE PRECISION for dlaed0

  COMPLEX for claed0

  COMPLEX*16 for zlaed0.

  Arrays: q(ldq, *), qstore(ldqs, *). The second dimension of these arrays must be at least `max(1, n)`.

  For real flavors:

  If `icompq = 0`, array q is not referenced.

  If `icompq = 1`, on entry, q is a subset of the columns of the orthogonal matrix used to reduce the full matrix to tridiagonal form corresponding to the subset of the full matrix which is being decomposed at this time.

  If `icompq = 2`, on entry, q will be the identity matrix. The array qstore is a workspace array referenced only when `icompq = 1`. Used to store parts of the eigenvector matrix when the updating matrix multiplies take place.

  For complex flavors:

  On entry, q must contain an qsiz-by-n matrix whose columns are unitarily orthonormal. It is a part of the unitary matrix that reduces the full dense Hermitian matrix to a (reducible) symmetric tridiagonal matrix. The array qstore is a workspace array used to store parts of the eigenvector matrix when the updating matrix multiplies take place.

ldq

  INTEGER. The first dimension of the array q; `ldq ≥ max(1, n)`.

ldqs

  INTEGER. The first dimension of the array qstore; `ldqs ≥ max(1, n)`.

work

  REAL for slaed0

  DOUBLE PRECISION for dlaed0.

  Workspace array, used in real flavors only.

  If `icompq = 0 or 1`, the dimension of work must be at least `(1 +3n+2nlg(n)+2n2)`, where `lg(n) = smallest integer k` such that `2k ≥ n`.

  If `icompq = 2`, the dimension of work must be at least `(4n+n2)`.

iwork

  INTEGER.

  Workspace array.

  For real flavors, if `icompq = 0` or 1, and for complex flavors, the dimension of iwork must be at least `(6+6n+5nlg(n))`.

  For real flavors, if `icompq = 2`, the dimension of iwork must be at least (3+5n).

## Output Parameters

d

  On exit, contains eigenvalues in ascending order.

e

  On exit, the array is destroyed.

q

  If icompq = 2, on exit, q contains the eigenvectors of the tridiagonal matrix.

info

  INTEGER.

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

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

  If `info = i >0`, the algorithm failed to compute an eigenvalue while working on the submatrix lying in rows and columns `i/(n+1)` through `mod(i, n+1)`.

Parent topic: Auxiliary Routines