LAPACK 3.12.1
LAPACK: Linear Algebra PACKage
|
subroutine zstedc | ( | character | compz, |
integer | n, | ||
double precision, dimension( * ) | d, | ||
double precision, dimension( * ) | e, | ||
complex*16, dimension( ldz, * ) | z, | ||
integer | ldz, | ||
complex*16, dimension( * ) | work, | ||
integer | lwork, | ||
double precision, dimension( * ) | rwork, | ||
integer | lrwork, | ||
integer, dimension( * ) | iwork, | ||
integer | liwork, | ||
integer | info ) |
ZSTEDC
Download ZSTEDC + dependencies [TGZ] [ZIP] [TXT]
!> !> ZSTEDC computes all eigenvalues and, optionally, eigenvectors of a !> symmetric tridiagonal matrix using the divide and conquer method. !> The eigenvectors of a full or band complex Hermitian matrix can also !> be found if ZHETRD or ZHPTRD or ZHBTRD has been used to reduce this !> matrix to tridiagonal form. !> !>
[in] | COMPZ | !> COMPZ is CHARACTER*1 !> = 'N': Compute eigenvalues only. !> = 'I': Compute eigenvectors of tridiagonal matrix also. !> = 'V': Compute eigenvectors of original Hermitian matrix !> also. On entry, Z contains the unitary matrix used !> to reduce the original matrix to tridiagonal form. !> |
[in] | N | !> N is INTEGER !> The dimension of the symmetric tridiagonal matrix. N >= 0. !> |
[in,out] | D | !> D is DOUBLE PRECISION array, dimension (N) !> On entry, the diagonal elements of the tridiagonal matrix. !> On exit, if INFO = 0, the eigenvalues in ascending order. !> |
[in,out] | E | !> E is DOUBLE PRECISION array, dimension (N-1) !> On entry, the subdiagonal elements of the tridiagonal matrix. !> On exit, E has been destroyed. !> |
[in,out] | Z | !> Z is COMPLEX*16 array, dimension (LDZ,N) !> On entry, if COMPZ = 'V', then Z contains the unitary !> matrix used in the reduction to tridiagonal form. !> On exit, if INFO = 0, then if COMPZ = 'V', Z contains the !> orthonormal eigenvectors of the original Hermitian matrix, !> and if COMPZ = 'I', Z contains the orthonormal eigenvectors !> of the symmetric tridiagonal matrix. !> If COMPZ = 'N', then Z is not referenced. !> |
[in] | LDZ | !> LDZ is INTEGER !> The leading dimension of the array Z. LDZ >= 1. !> If eigenvectors are desired, then LDZ >= max(1,N). !> |
[out] | WORK | !> WORK is COMPLEX*16 array, dimension (MAX(1,LWORK)) !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !> |
[in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. !> If COMPZ = 'N' or 'I', or N <= 1, LWORK must be at least 1. !> If COMPZ = 'V' and N > 1, LWORK must be at least N*N. !> Note that for COMPZ = 'V', then if N is less than or !> equal to the minimum divide size, usually 25, then LWORK need !> only be 1. !> !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates the optimal sizes of the WORK, RWORK and !> IWORK arrays, returns these values as the first entries of !> the WORK, RWORK and IWORK arrays, and no error message !> related to LWORK or LRWORK or LIWORK is issued by XERBLA. !> |
[out] | RWORK | !> RWORK is DOUBLE PRECISION array, dimension (MAX(1,LRWORK)) !> On exit, if INFO = 0, RWORK(1) returns the optimal LRWORK. !> |
[in] | LRWORK | !> LRWORK is INTEGER !> The dimension of the array RWORK. !> If COMPZ = 'N' or N <= 1, LRWORK must be at least 1. !> If COMPZ = 'V' and N > 1, LRWORK must be at least !> 1 + 3*N + 2*N*lg N + 4*N**2 , !> where lg( N ) = smallest integer k such !> that 2**k >= N. !> If COMPZ = 'I' and N > 1, LRWORK must be at least !> 1 + 4*N + 2*N**2 . !> Note that for COMPZ = 'I' or 'V', then if N is less than or !> equal to the minimum divide size, usually 25, then LRWORK !> need only be max(1,2*(N-1)). !> !> If LRWORK = -1, then a workspace query is assumed; the !> routine only calculates the optimal sizes of the WORK, RWORK !> and IWORK arrays, returns these values as the first entries !> of the WORK, RWORK and IWORK arrays, and no error message !> related to LWORK or LRWORK or LIWORK is issued by XERBLA. !> |
[out] | IWORK | !> IWORK is INTEGER array, dimension (MAX(1,LIWORK)) !> On exit, if INFO = 0, IWORK(1) returns the optimal LIWORK. !> |
[in] | LIWORK | !> LIWORK is INTEGER !> The dimension of the array IWORK. !> If COMPZ = 'N' or N <= 1, LIWORK must be at least 1. !> If COMPZ = 'V' or N > 1, LIWORK must be at least !> 6 + 6*N + 5*N*lg N. !> If COMPZ = 'I' or N > 1, LIWORK must be at least !> 3 + 5*N . !> Note that for COMPZ = 'I' or 'V', then if N is less than or !> equal to the minimum divide size, usually 25, then LIWORK !> need only be 1. !> !> If LIWORK = -1, then a workspace query is assumed; the !> routine only calculates the optimal sizes of the WORK, RWORK !> and IWORK arrays, returns these values as the first entries !> of the WORK, RWORK and IWORK arrays, and no error message !> related to LWORK or LRWORK or LIWORK is issued by XERBLA. !> |
[out] | INFO | !> INFO is INTEGER !> = 0: successful exit. !> < 0: if INFO = -i, the i-th argument had an illegal value. !> > 0: The algorithm failed to compute an eigenvalue while !> working on the submatrix lying in rows and columns !> INFO/(N+1) through mod(INFO,N+1). !> |
Definition at line 202 of file zstedc.f.