doubleSYeigen(3)
π doubleSYeigen(3) β the LAPACK glow-up π
okay so this is a page from the LAPACK manual, bestie, and it's literally the whole squad of double-precision eigenvalue driver routines for SY matrices. It's giving β¨main character energyβ¨ for symmetric eigenproblems. Sit down, grab a strawberry π, we're doing this.
β¨ NAME β¨
doubleSYeigen β double π
π¦ SYNOPSIS π¦
Functions
subroutine dsyev (JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, INFO)β DSYEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matricessubroutine dsyev_2stage (JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, INFO)β DSYEV_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matricessubroutine dsyevd (JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, IWORK, LIWORK, INFO)β DSYEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matricessubroutine dsyevd_2stage (JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, IWORK, LIWORK, INFO)β DSYEVD_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matricessubroutine dsyevr (JOBZ, RANGE, UPLO, N, A, LDA, VL, VU, IL, IU, ABSTOL, M, W, Z, LDZ, ISUPPZ, WORK, LWORK, IWORK, LIWORK, INFO)β DSYEVR computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matricessubroutine dsyevr_2stage (JOBZ, RANGE, UPLO, N, A, LDA, VL, VU, IL, IU, ABSTOL, M, W, Z, LDZ, ISUPPZ, WORK, LWORK, IWORK, LIWORK, INFO)β DSYEVR_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matricessubroutine dsyevx (JOBZ, RANGE, UPLO, N, A, LDA, VL, VU, IL, IU, ABSTOL, M, W, Z, LDZ, WORK, LWORK, IWORK, IFAIL, INFO)β DSYEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matricessubroutine dsyevx_2stage (JOBZ, RANGE, UPLO, N, A, LDA, VL, VU, IL, IU, ABSTOL, M, W, Z, LDZ, WORK, LWORK, IWORK, IFAIL, INFO)β DSYEVX_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matricessubroutine dsygv (ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK, LWORK, INFO)β DSYGVsubroutine dsygv_2stage (ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK, LWORK, INFO)β DSYGV_2STAGEsubroutine dsygvd (ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK, LWORK, IWORK, LIWORK, INFO)β DSYGVDsubroutine dsygvx (ITYPE, JOBZ, RANGE, UPLO, N, A, LDA, B, LDB, VL, VU, IL, IU, ABSTOL, M, W, Z, LDZ, WORK, LWORK, IWORK, IFAIL, INFO)β DSYGVX
π Detailed Description π
This is the group of double eigenvalue driver functions for SY matrices. That's it, that's the whole vibe. β¨
π Function Documentation π
π subroutine dsyev π
subroutine dsyev (character JOBZ, character UPLO, integer N, double precision, dimension( lda, * ) A, integer LDA, double precision, dimension( * ) W, double precision, dimension( * ) WORK, integer LWORK, integer INFO)
DSYEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matrices. π¦
Purpose:
DSYEV computes all eigenvalues and, optionally, eigenvectors of a
real symmetric matrix A.
No cap, that's the whole job. π
Parameters
JOBZ
JOBZ is CHARACTER*1
= 'N': Compute eigenvalues only;
= 'V': Compute eigenvalues and eigenvectors.
UPLO
UPLO is CHARACTER*1
= 'U': Upper triangle of A is stored;
= 'L': Lower triangle of A is stored.
N
N is INTEGER
The order of the matrix A. N >= 0.
A
A is DOUBLE PRECISION array, dimension (LDA, N)
On entry, the symmetric matrix A. If UPLO = 'U', the
leading N-by-N upper triangular part of A contains the
upper triangular part of the matrix A. If UPLO = 'L',
the leading N-by-N lower triangular part of A contains
the lower triangular part of the matrix A.
On exit, if JOBZ = 'V', then if INFO = 0, A contains the
orthonormal eigenvectors of the matrix A.
If JOBZ = 'N', then on exit the lower triangle (if UPLO='L')
or the upper triangle (if UPLO='U') of A, including the
diagonal, is destroyed.
heads up bestie β ifJOBZ = 'N', that triangle ofA(diagonal included π) is destroyed on exit. gone. periodt.
LDA
LDA is INTEGER
The leading dimension of the array A. LDA >= max(1,N).
W
W is DOUBLE PRECISION array, dimension (N)
If INFO = 0, the eigenvalues in ascending order.
WORK
WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK))
On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
LWORK
LWORK is INTEGER
The length of the array WORK. LWORK >= max(1,3*N-1).
For optimal efficiency, LWORK >= (NB+2)*N,
where NB is the blocksize for DSYTRD returned by ILAENV.
If LWORK = -1, then a workspace query is assumed; the routine
only calculates the optimal size of the WORK array, returns
this value as the first entry of the WORK array, and no error
message related to LWORK is issued by XERBLA.
iykyk β setting LWORK = -1 is the little cheat code for "hey just tell me how much space you want". πΈ
INFO
INFO is INTEGER
= 0: successful exit
< 0: if INFO = -i, the i-th argument had an illegal value
> 0: if INFO = i, the algorithm failed to converge; i
off-diagonal elements of an intermediate tridiagonal
form did not converge to zero.
Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π¦ subroutine dsyev_2stage π¦
subroutine dsyev_2stage (character JOBZ, character UPLO, integer N, double precision, dimension( lda, * ) A, integer LDA, double precision, dimension( * ) W, double precision, dimension( * ) WORK, integer LWORK, integer INFO)
DSYEV_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matrices. It's the two-stage glow-up, bestie. β¨
Purpose:
DSYEV_2STAGE computes all eigenvalues and, optionally, eigenvectors of a
real symmetric matrix A using the 2stage technique for
the reduction to tridiagonal.
Parameters
JOBZ
JOBZ is CHARACTER*1
= 'N': Compute eigenvalues only;
= 'V': Compute eigenvalues and eigenvectors.
Not available in this release.
π not available in this release for 'V', bestie. don't come for me, it's literally what it says.
UPLO
UPLO is CHARACTER*1
= 'U': Upper triangle of A is stored;
= 'L': Lower triangle of A is stored.
N
N is INTEGER
The order of the matrix A. N >= 0.
A
A is DOUBLE PRECISION array, dimension (LDA, N)
On entry, the symmetric matrix A. If UPLO = 'U', the
leading N-by-N upper triangular part of A contains the
upper triangular part of the matrix A. If UPLO = 'L',
the leading N-by-N lower triangular part of A contains
the lower triangular part of the matrix A.
On exit, if JOBZ = 'V', then if INFO = 0, A contains the
orthonormal eigenvectors of the matrix A.
If JOBZ = 'N', then on exit the lower triangle (if UPLO='L')
or the upper triangle (if UPLO='U') of A, including the
diagonal, is destroyed.
same warning, same energy π βJOBZ = 'N'means that triangle ofAplus the diagonal gets destroyed.
LDA
LDA is INTEGER
The leading dimension of the array A. LDA >= max(1,N).
W
W is DOUBLE PRECISION array, dimension (N)
If INFO = 0, the eigenvalues in ascending order.
WORK
WORK is DOUBLE PRECISION array, dimension LWORK
On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
LWORK
LWORK is INTEGER
The length of the array WORK. LWORK >= 1, when N <= 1;
otherwise
If JOBZ = 'N' and N > 1, LWORK must be queried.
LWORK = MAX(1, dimension) where
dimension = max(stage1,stage2) + (KD+1)*N + 2*N
= N*KD + N*max(KD+1,FACTOPTNB)
+ max(2*KD*KD, KD*NTHREADS)
+ (KD+1)*N + 2*N
where KD is the blocking size of the reduction,
FACTOPTNB is the blocking used by the QR or LQ
algorithm, usually FACTOPTNB=128 is a good choice
NTHREADS is the number of threads used when
openMP compilation is enabled, otherwise =1.
If JOBZ = 'V' and N > 1, LWORK must be queried. Not yet available
If LWORK = -1, then a workspace query is assumed; the routine
only calculates the optimal size of the WORK array, returns
this value as the first entry of the WORK array, and no error
message related to LWORK is issued by XERBLA.
ngl this LWORK formula is a whole meal. π also note: if JOBZ = 'V' and N > 1, LWORK must be queried, and it's Not yet available.
INFO
INFO is INTEGER
= 0: successful exit
< 0: if INFO = -i, the i-th argument had an illegal value
> 0: if INFO = i, the algorithm failed to converge; i
off-diagonal elements of an intermediate tridiagonal
form did not converge to zero.
Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Further Details:
All details about the 2stage techniques are available in:
Azzam Haidar, Hatem Ltaief, and Jack Dongarra.
Parallel reduction to condensed forms for symmetric eigenvalue problems
using aggregated fine-grained and memory-aware kernels. In Proceedings
of 2011 International Conference for High Performance Computing,
Networking, Storage and Analysis (SC '11), New York, NY, USA,
Article 8 , 11 pages.
http://doi.acm.org/10.1145/2063384.2063394
A. Haidar, J. Kurzak, P. Luszczek, 2013.
An improved parallel singular value algorithm and its implementation
for multicore hardware, In Proceedings of 2013 International Conference
for High Performance Computing, Networking, Storage and Analysis (SC '13).
Denver, Colorado, USA, 2013.
Article 90, 12 pages.
http://doi.acm.org/10.1145/2503210.2503292
A. Haidar, R. Solca, S. Tomov, T. Schulthess and J. Dongarra.
A novel hybrid CPU-GPU generalized eigensolver for electronic structure
calculations based on fine-grained memory aware tasks.
International Journal of High Performance Computing Applications.
Volume 28 Issue 2, Pages 196-209, May 2014.
http://hpc.sagepub.com/content/28/2/196
the receipts, bestie π β all three of them, cited and everything. π
β¨ dsyevd β the moment we've all been waiting for π
subroutine dsyevd (character JOBZ, character UPLO, integer N, double
precision, dimension( lda, * ) A, integer LDA, double precision,
dimension( * ) W, double precision, dimension( * ) WORK, integer LWORK,
integer, dimension( * ) IWORK, integer LIWORK, integer INFO)
okay so bestie, listen β DSYEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matrices. main character behavior honestly.
π Purpose
DSYEVD computes all eigenvalues and, optionally, eigenvectors of a real symmetric matrix A. If eigenvectors are desired, it uses a divide and conquer algorithm. it's giving β¨big brainβ¨ energy, fr.
The divide and conquer algorithm makes very mild assumptions about floating point arithmetic. It will work on machines with a guard digit in add/subtract, or on those binary machines without guard digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It could conceivably fail on hexadecimal or decimal machines without guard digits, but we know of none. no cap. π
Because of large use of BLAS of level 3, DSYEVD needs N**2 more workspace than DSYEVX. she's a little extra but she's worth it π
πΈ Parameters
JOBZβJOBZ is CHARACTER*1= 'N': Compute eigenvalues only;= 'V': Compute eigenvalues and eigenvectors.
UPLOβUPLO is CHARACTER*1= 'U': Upper triangle ofAis stored;= 'L': Lower triangle ofAis stored.
NβN is INTEGER. The order of the matrixA.N >= 0.AβA is DOUBLE PRECISION array, dimension (LDA, N)- On entry, the symmetric matrix
A. IfUPLO = 'U', the leading N-by-N upper triangular part ofAcontains the upper triangular part of the matrixA. IfUPLO = 'L', the leading N-by-N lower triangular part ofAcontains the lower triangular part of the matrixA. - On exit, if
JOBZ = 'V', then ifINFO = 0,Acontains the orthonormal eigenvectors of the matrixA. - If
JOBZ = 'N', then on exit the lower triangle (ifUPLO='L') or the upper triangle (ifUPLO='U') ofA, including the diagonal, is destroyed. π she really said "you won't be needing this anymore."
- On entry, the symmetric matrix
LDAβLDA is INTEGER. The leading dimension of the arrayA.LDA >= max(1,N).WβW is DOUBLE PRECISION array, dimension (N). IfINFO = 0, the eigenvalues in ascending order. bestie they come out sorted, we love a tidy queen πWORKβWORK is DOUBLE PRECISION array, dimension (LWORK). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβLWORK is INTEGER. The dimension of the arrayWORK.- If
N <= 1,LWORKmust be at least1. - If
JOBZ = 'N'andN > 1,LWORKmust be at least2*N+1. - If
JOBZ = 'V'andN > 1,LWORKmust be at least1 + 6*N + 2*N**2. - If
LWORK = -1, then a workspace query is assumed; the routine only calculates the optimal sizes of theWORKandIWORKarrays, returns these values as the first entries of theWORKandIWORKarrays, and no error message related toLWORKorLIWORKis issued byXERBLA.
- If
IWORKβIWORK is INTEGER array, dimension (MAX(1,LIWORK)). On exit, ifINFO = 0,IWORK(1)returns the optimalLIWORK.LIWORKβLIWORK is INTEGER. The dimension of the arrayIWORK.- If
N <= 1,LIWORKmust be at least1. - If
JOBZ = 'N'andN > 1,LIWORKmust be at least1. - If
JOBZ = 'V'andN > 1,LIWORKmust be at least3 + 5*N. - If
LIWORK = -1, then a workspace query is assumed; the routine only calculates the optimal sizes of theWORKandIWORKarrays, returns these values as the first entries of theWORKandIWORKarrays, and no error message related toLWORKorLIWORKis issued byXERBLA.
- If
INFOβINFO is INTEGER= 0: successful exit π< 0: ifINFO = -i, the i-th argument had an illegal value π> 0: ifINFO = iandJOBZ = 'N', then the algorithm failed to converge;ioff-diagonal elements of an intermediate tridiagonal form did not converge to zero;- if
INFO = iandJOBZ = 'V', then the algorithm failed to compute an eigenvalue while working on the submatrix lying in rows and columnsINFO/(N+1)throughmod(INFO,N+1).
π Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π«Ά Contributors:
- Jeff Rutter, Computer Science Division, University of California at Berkeley, USA
- Modified by Francoise Tisseur, University of Tennessee
- Modified description of
INFO. Sven, 16 Feb 05.
π¦ dsyevd_2stage β she got a glow-up β¨
subroutine dsyevd_2stage (character JOBZ, character UPLO, integer N, double
precision, dimension( lda, * ) A, integer LDA, double precision,
dimension( * ) W, double precision, dimension( * ) WORK, integer LWORK,
integer, dimension( * ) IWORK, integer LIWORK, integer INFO)
DSYEVD_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matrices β but make it two stage, iykyk.
π Purpose
DSYEVD_2STAGE computes all eigenvalues and, optionally, eigenvectors of a real symmetric matrix A using the 2stage technique for the reduction to tridiagonal. If eigenvectors are desired, it uses a divide and conquer algorithm.
The divide and conquer algorithm makes very mild assumptions about floating point arithmetic. It will work on machines with a guard digit in add/subtract, or on those binary machines without guard digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It could conceivably fail on hexadecimal or decimal machines without guard digits, but we know of none. same disclaimer bestie, it's iconic at this point π
πΈ Parameters
JOBZβJOBZ is CHARACTER*1= 'N': Compute eigenvalues only;= 'V': Compute eigenvalues and eigenvectors. Not available in this release. π yeah she's still cooking, give her a sec.
UPLOβUPLO is CHARACTER*1= 'U': Upper triangle ofAis stored;= 'L': Lower triangle ofAis stored.
NβN is INTEGER. The order of the matrixA.N >= 0.AβA is DOUBLE PRECISION array, dimension (LDA, N)- On entry, the symmetric matrix
A. IfUPLO = 'U', the leading N-by-N upper triangular part ofAcontains the upper triangular part of the matrixA. IfUPLO = 'L', the leading N-by-N lower triangular part ofAcontains the lower triangular part of the matrixA. - On exit, if
JOBZ = 'V', then ifINFO = 0,Acontains the orthonormal eigenvectors of the matrixA. - If
JOBZ = 'N', then on exit the lower triangle (ifUPLO='L') or the upper triangle (ifUPLO='U') ofA, including the diagonal, is destroyed. same deal, bestie, she takes what she needs π
- On entry, the symmetric matrix
LDAβLDA is INTEGER. The leading dimension of the arrayA.LDA >= max(1,N).WβW is DOUBLE PRECISION array, dimension (N). IfINFO = 0, the eigenvalues in ascending order.WORKβWORK is DOUBLE PRECISION array, dimension (LWORK). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβLWORK is INTEGER. The dimension of the arrayWORK.- If
N <= 1,LWORKmust be at least1. - If
JOBZ = 'N'andN > 1,LWORKmust be queried. fr fr, no guessing here:
- If
LWORK = MAX(1, dimension) where
dimension = max(stage1,stage2) + (KD+1)*N + 2*N+1
= N*KD + N*max(KD+1,FACTOPTNB)
+ max(2*KD*KD, KD*NTHREADS)
+ (KD+1)*N + 2*N+1
where KD is the blocking size of the reduction, FACTOPTNB is the blocking used by the QR or LQ algorithm, usually FACTOPTNB=128 is a good choice, NTHREADS is the number of threads used when openMP compilation is enabled, otherwise =1.
- If
JOBZ = 'V'andN > 1,LWORKmust be at least1 + 6*N + 2*N**2. - If
LWORK = -1, then a workspace query is assumed; the routine only calculates the optimal sizes of theWORKandIWORKarrays, returns these values as the first entries of theWORKandIWORKarrays, and no error message related toLWORKorLIWORKis issued byXERBLA.
IWORKβIWORK is INTEGER array, dimension (MAX(1,LIWORK)). On exit, ifINFO = 0,IWORK(1)returns the optimalLIWORK.LIWORKβLIWORK is INTEGER. The dimension of the arrayIWORK.- If
N <= 1,LIWORKmust be at least1. - If
JOBZ = 'N'andN > 1,LIWORKmust be at least1. - If
JOBZ = 'V'andN > 1,LIWORKmust be at least3 + 5*N. - If
LIWORK = -1, then a workspace query is assumed; the routine only calculates the optimal sizes of theWORKandIWORKarrays, returns these values as the first entries of theWORKandIWORKarrays, and no error message related toLWORKorLIWORKis issued byXERBLA.
- If
INFOβINFO is INTEGER= 0: successful exit π< 0: ifINFO = -i, the i-th argument had an illegal value π> 0: ifINFO = iandJOBZ = 'N', then the algorithm failed to converge;ioff-diagonal elements of an intermediate tridiagonal form did not converge to zero;- if
INFO = iandJOBZ = 'V', then the algorithm failed to compute an eigenvalue while working on the submatrix lying in rows and columnsINFO/(N+1)throughmod(INFO,N+1).
π Author
- Univ. of Tennessee
Contributors
- Jeff Rutter, Computer Science Division, University of California at Berkeley, USA
- Modified by Francoise Tisseur, University of Tennessee
- Modified description of
INFO. Sven, 16 Feb 05.
π Further Details π
Okay bestie, all the lore about the 2stage techniques lives in these, no cap:
- Azzam Haidar, Hatem Ltaief, and Jack Dongarra. Parallel reduction to condensed forms for symmetric eigenvalue problems using aggregated fine-grained and memory-aware kernels. In Proceedings of 2011 International Conference for High Performance Computing, Networking, Storage and Analysis (SC '11), New York, NY, USA, Article 8, 11 pages.
http://doi.acm.org/10.1145/2063384.2063394 - A. Haidar, J. Kurzak, P. Luszczek, 2013. An improved parallel singular value algorithm and its implementation for multicore hardware, In Proceedings of 2013 International Conference for High Performance Computing, Networking, Storage and Analysis (SC '13). Denver, Colorado, USA, 2013. Article 90, 12 pages.
http://doi.acm.org/10.1145/2503210.2503292 - A. Haidar, R. Solca, S. Tomov, T. Schulthess and J. Dongarra. A novel hybrid CPU-GPU generalized eigensolver for electronic structure calculations based on fine-grained memory aware tasks. International Journal of High Performance Computing Applications. Volume 28 Issue 2, Pages 196-209, May 2014.
http://hpc.sagepub.com/content/28/2/196
π subroutine dsyevr π
subroutine dsyevr (character JOBZ, character RANGE, character UPLO, integer
N, double precision, dimension( lda, * ) A, integer LDA, double
precision VL, double precision VU, integer IL, integer IU, double
precision ABSTOL, integer M, double precision, dimension( * ) W, double
precision, dimension( ldz, * ) Z, integer LDZ, integer, dimension( * )
ISUPPZ, double precision, dimension( * ) WORK, integer LWORK, integer,
dimension( * ) IWORK, integer LIWORK, integer INFO)
DSYEVR computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matrices
π Purpose π
So basically, DSYEVR computes selected eigenvalues and, if you want them, eigenvectors of a real symmetric matrix A. And the way you pick which ones? You can either give it a range of values or a range of indices for the eigenvalues you're chasing. Your call, bestie. β¨
DSYEVR kicks things off by reducing the matrix A to tridiagonal form T with a call to DSYTRD. Then β whenever it possibly can β DSYEVR calls DSTEMR to compute the eigenspectrum using Relatively Robust Representations. DSTEMR gets the eigenvalues via the dqds algorithm, while the orthogonal eigenvectors come out of various 'good' L D L^T representations (a.k.a. Relatively Robust Representations, same thing, different name π
). Gram-Schmidt orthogonalization is avoided as far as possible, which is honestly iconic behavior.
More specifically, here's the whole algorithm step by step:
For each unreduced block (submatrix) of T:
- (a) Compute
T - sigma I = L D L^T, so thatLandDdefine all the wanted eigenvalues to high relative accuracy. What that means: tiny relative changes in the entries ofDandLcause only tiny relative changes in the eigenvalues and eigenvectors. The standard (unfactored) representation of the tridiagonal matrixTdoes not have this property in general. Rude of it, honestly. - (b) Compute the eigenvalues to suitable accuracy. If eigenvectors are on your wishlist, the algorithm only attains full accuracy of the computed eigenvalues right before the corresponding vectors have to be computed β see steps c) and d).
- (c) For each cluster of close eigenvalues, select a new shift close to the cluster, find a new factorization, and refine the shifted eigenvalues to suitable accuracy.
- (d) For each eigenvalue with a large enough relative separation, compute the corresponding eigenvector by forming a rank revealing twisted factorization. Then go back to (c) for any clusters that remain.
The desired accuracy of the output is yours to dictate with the input parameter ABSTOL. π
For more details, see DSTEMR's documentation and:
- Inderjit S. Dhillon and Beresford N. Parlett: 'Multiple representations to compute orthogonal eigenvectors of symmetric tridiagonal matrices,' Linear Algebra and its Applications, 387(1), pp. 1-28, August 2004.
- Inderjit Dhillon and Beresford Parlett: 'Orthogonal Eigenvectors and Relative Gaps,' SIAM Journal on Matrix Analysis and Applications, Vol. 25, 2004. Also LAPACK Working Note 154.
- Inderjit Dhillon: 'A new O(n^2) algorithm for the symmetric tridiagonal eigenvalue/eigenvector problem', Computer Science Division Technical Report No. UCB/CSD-97-971, UC Berkeley, May 1997.
Note 1 :DSYEVRcallsDSTEMRwhen the full spectrum is requested on machines which conform to the ieee-754 floating point standard.DSYEVRcallsDSTEBZandDSTEINon non-ieee machines and when partial spectrum requests are made.
Heads up, fr fr: normal execution ofDSTEMRmay createNaNs and infinities and hence may abort due to a floating point exception in environments which do not handleNaNs and infinities in the ieee standard default manner. π Not a vibe, but you gotta know.
π Parameters π
JOBZβJOBZisCHARACTER*1= 'N': Compute eigenvalues only;= 'V': Compute eigenvalues and eigenvectors.
RANGEβRANGEisCHARACTER*1= 'A': all eigenvalues will be found.= 'V': all eigenvalues in the half-open interval(VL,VU]will be found.= 'I': theIL-th throughIU-th eigenvalues will be found.
For RANGE = 'V' or 'I' and IU - IL < N - 1, DSTEBZ and DSTEIN are called.
UPLOβUPLOisCHARACTER*1= 'U': Upper triangle ofAis stored;= 'L': Lower triangle ofAis stored.
NβNisINTEGER. The order of the matrixA.N >= 0.AβAisDOUBLE PRECISIONarray, dimension(LDA, N). On entry, the symmetric matrixA. IfUPLO = 'U', the leadingN-by-Nupper triangular part ofAcontains the upper triangular part of the matrixA. IfUPLO = 'L', the leadingN-by-Nlower triangular part ofAcontains the lower triangular part of the matrixA. On exit, the lower triangle (ifUPLO='L') or the upper triangle (ifUPLO='U') ofA, including the diagonal, is destroyed. π She's gone, bestie.LDAβLDAisINTEGER. The leading dimension of the arrayA.LDA >= max(1,N).VLβVLisDOUBLE PRECISION. IfRANGE='V', the lower bound of the interval to be searched for eigenvalues.VL < VU.Not referenced ifRANGE = 'A'or'I'.VUβVUisDOUBLE PRECISION. IfRANGE='V', the upper bound of the interval to be searched for eigenvalues.VL < VU.Not referenced ifRANGE = 'A'or'I'.ILβILisINTEGER. IfRANGE='I', the index of the smallest eigenvalue to be returned.1 <= IL <= IU <= N, ifN > 0;IL = 1andIU = 0ifN = 0. Not referenced ifRANGE = 'A'or'V'.IUβIUisINTEGER. IfRANGE='I', the index of the largest eigenvalue to be returned.1 <= IL <= IU <= N, ifN > 0;IL = 1andIU = 0ifN = 0. Not referenced ifRANGE = 'A'or'V'.ABSTOLβABSTOLisDOUBLE PRECISION. The absolute error tolerance for the eigenvalues. An approximate eigenvalue is accepted as converged when it is determined to lie in an interval[a,b]of width less than or equal to
ABSTOL + EPS * max( |a|,|b| ) ,
where EPS is the machine precision. If ABSTOL is less than or equal to zero, then EPS*|T| will be used in its place, where |T| is the 1-norm of the tridiagonal matrix obtained by reducing A to tridiagonal form.
See 'Computing Small Singular Values of Bidiagonal Matrices with Guaranteed High Relative Accuracy,' by Demmel and Kahan, LAPACK Working Note #3.
If high relative accuracy is important, set ABSTOL to DLAMCH( 'Safe minimum' ). Doing so will guarantee that eigenvalues are computed to high relative accuracy when possible in future releases. The current code does not make any guarantees about high relative accuracy, but future releases will. See J. Barlow and J. Demmel, 'Computing Accurate Eigensystems of Scaled Diagonally Dominant Matrices', LAPACK Working Note #7, for a discussion of which matrices define their eigenvalues to high relative accuracy.
MβMisINTEGER. The total number of eigenvalues found.0 <= M <= N.IfRANGE = 'A',M = N, and ifRANGE = 'I',M = IU-IL+1.WβWisDOUBLE PRECISIONarray, dimension(N). The firstMelements contain the selected eigenvalues in ascending order. β¨ZβZisDOUBLE PRECISIONarray, dimension(LDZ, max(1,M)). IfJOBZ = 'V', then ifINFO = 0, the firstMcolumns ofZcontain the orthonormal eigenvectors of the matrixAcorresponding to the selected eigenvalues, with thei-th column ofZholding the eigenvector associated withW(i). IfJOBZ = 'N', thenZis not referenced. Note: the user must ensure that at leastmax(1,M)columns are supplied in the arrayZ; ifRANGE = 'V', the exact value ofMis not known in advance and an upper bound must be used. SupplyingNcolumns is always safe. π«ΆLDZβLDZisINTEGER. The leading dimension of the arrayZ.LDZ >= 1, and ifJOBZ = 'V',LDZ >= max(1,N).ISUPPZ
ISUPPZ
ISUPPZ is an INTEGER array, dimension ( 2*max(1,M) ).
It's the support of the eigenvectors sitting in Z β like, the indices that are actually nonzero in Z. The i-th eigenvector is only nonzero in elements ISUPPZ( 2*i-1 ) through ISUPPZ( 2*i ). This is an output of DSTEMR (tridiagonal matrix). The support of the eigenvectors of A is typically 1:N because of the orthogonal transformations that DORMTR applies. π«
Implemented only for RANGE = 'A' or 'I' and IU - IL = N - 1 β so don't come for it otherwise, bestie.
WORK
WORK is a DOUBLE PRECISION array, dimension (MAX(1,LWORK)).
On exit, if INFO = 0, WORK(1) returns the optimal LWORK. β¨
LWORK
LWORK is INTEGER.
The dimension of the array WORK. LWORK >= max(1,26*N).
For optimal efficiency, LWORK >= (NB+6)*N, where NB is the max of the blocksize for DSYTRD and DORMTR returned by ILAENV.
If LWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA. (So basically you're just asking "how much room do you need, queen?" and it tells you. π
)
IWORK
IWORK is INTEGER array, dimension (MAX(1,LIWORK)).
On exit, if INFO = 0, IWORK(1) returns the optimal LWORK.
LIWORK
LIWORK is INTEGER.
The dimension of the array IWORK. LIWORK >= max(1,10*N).
If LIWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of the IWORK array, returns this value as the first entry of the IWORK array, and no error message related to LIWORK is issued by XERBLA.
INFO
INFO is INTEGER.
= 0: successful exit π< 0: ifINFO = -i, the i-th argument had an illegal value π> 0: Internal error π
π Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π«Ά Contributors:
- Inderjit Dhillon, IBM Almaden, USA
- Osni Marques, LBNL/NERSC, USA
- Ken Stanley, Computer Science Division, University of California at Berkeley, USA
- Jason Riedy, Computer Science Division, University of California at Berkeley, USA
β¨ subroutine dsyevr_2stage β¨
subroutine dsyevr_2stage (character JOBZ, character RANGE, character UPLO,
integer N, double precision, dimension( lda, * ) A, integer LDA, double
precision VL, double precision VU, integer IL, integer IU, double
precision ABSTOL, integer M, double precision, dimension( * ) W, double
precision, dimension( ldz, * ) Z, integer LDZ, integer, dimension( * )
ISUPPZ, double precision, dimension( * ) WORK, integer LWORK, integer,
dimension( * ) IWORK, integer LIWORK, integer INFO)
DSYEVR_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matrices π
π Purpose:
DSYEVR_2STAGE computes selected eigenvalues and, optionally, eigenvectors of a real symmetric matrix A using the 2stage technique for the reduction to tridiagonal. Eigenvalues and eigenvectors can be selected by specifying either a range of values or a range of indices for the desired eigenvalues. π«
DSYEVR_2STAGE first reduces the matrix A to tridiagonal form T with a call to DSYTRD. Then, whenever possible, DSYEVR_2STAGE calls DSTEMR to compute the eigenspectrum using Relatively Robust Representations. DSTEMR computes eigenvalues by the dqds algorithm, while orthogonal eigenvectors are computed from various 'good' L D L^T representations (also known as Relatively Robust Representations). Gram-Schmidt orthogonalization is avoided as far as possible. More specifically, the various steps of the algorithm are as follows.
For each unreduced block (submatrix) of T,
- (a) Compute
T - sigma I = L D L^T, so that L and D define all the wanted eigenvalues to high relative accuracy. This means that small relative changes in the entries of D and L cause only small relative changes in the eigenvalues and eigenvectors. The standard (unfactored) representation of the tridiagonal matrix T does not have this property in general. - (b) Compute the eigenvalues to suitable accuracy. If the eigenvectors are desired, the algorithm attains full accuracy of the computed eigenvalues only right before the corresponding vectors have to be computed, see steps c) and d).
- (c) For each cluster of close eigenvalues, select a new shift close to the cluster, find a new factorization, and refine the shifted eigenvalues to suitable accuracy.
- (d) For each eigenvalue with a large enough relative separation compute the corresponding eigenvector by forming a rank revealing twisted factorization. Go back to (c) for any clusters that remain.
The desired accuracy of the output can be specified by the input parameter ABSTOL.
For more details, see DSTEMR's documentation and:
- Inderjit S. Dhillon and Beresford N. Parlett: 'Multiple representations to compute orthogonal eigenvectors of symmetric tridiagonal matrices,' Linear Algebra and its Applications, 387(1), pp. 1-28, August 2004.
- Inderjit Dhillon and Beresford Parlett: 'Orthogonal Eigenvectors and Relative Gaps,' SIAM Journal on Matrix Analysis and Applications, Vol. 25, 2004. Also LAPACK Working Note 154.
- Inderjit Dhillon: 'A new O(n^2) algorithm for the symmetric tridiagonal eigenvalue/eigenvector problem', Computer Science Division Technical Report No. UCB/CSD-97-971, UC Berkeley, May 1997.
Note 1 :DSYEVR_2STAGEcallsDSTEMRwhen the full spectrum is requested on machines which conform to the ieee-754 floating point standard.DSYEVR_2STAGEcallsDSTEBZandSSTEINon non-ieee machines and when partial spectrum requests are made.
Normal execution of DSTEMR may create NaNs and infinities and hence may abort due to a floating point exception in environments which do not handle NaNs and infinities in the ieee standard default manner. π Not a vibe, but forewarned is forearmed.
πΈ Parameters
JOBZ
JOBZ is CHARACTER*1
= 'N': Compute eigenvalues only;= 'V': Compute eigenvalues and eigenvectors. Not available in this release.
RANGE
RANGE is CHARACTER*1
= 'A': all eigenvalues will be found.= 'V': all eigenvalues in the half-open interval(VL,VU]will be found.= 'I': the IL-th through IU-th eigenvalues will be found.
For RANGE = 'V' or 'I' and IU - IL < N - 1, DSTEBZ and DSTEIN are called.
UPLO
UPLO is CHARACTER*1
= 'U': Upper triangle of A is stored;= 'L': Lower triangle of A is stored.
N
N is INTEGER
The order of the matrix A. N >= 0.
A
A is DOUBLE PRECISION array, dimension (LDA, N)
On entry, the symmetric matrix A. If UPLO = 'U', the leading N-by-N upper triangular part of A contains the upper triangular part of the matrix A. If UPLO = 'L', the leading N-by-N lower triangular part of A contains the lower triangular part of the matrix A.
On exit, the lower triangle (if UPLO='L') or the upper triangle (if UPLO='U') of A, including the diagonal, is destroyed. π That's just how it is, she goes in and doesn't come back the same.
LDA
LDA is INTEGER
The leading dimension of the array A. LDA >= max(1,N).
VL
VL is DOUBLE PRECISION
If RANGE='V', the lower bound of the interval to be searched for eigenvalues. VL < VU. Not referenced if RANGE = 'A' or 'I'.
VU
VU is DOUBLE PRECISION
If RANGE='V', the upper bound of the interval to be searched for eigenvalues. VL < VU. Not referenced if RANGE = 'A' or 'I'.
IL
IL is INTEGER
If RANGE='I', the index of the smallest eigenvalue to be returned. 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. Not referenced if RANGE = 'A' or 'V'.
IU
IU is INTEGER
If RANGE='I', the index of the largest eigenvalue to be returned. 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. Not referenced if RANGE = 'A' or 'V'.
ABSTOL
ABSTOL is DOUBLE PRECISION
The absolute error tolerance for the eigenvalues. An approximate eigenvalue is accepted as converged when it is determined to lie in an interval [a,b] of width less than or equal to
ABSTOL + EPS * max( |a|,|b| ) ,
where EPS is the machine precision. If ABSTOL is less than or equal to zero, then EPS*|T| will be used in its place, where |T| is the 1-norm of the tridiagonal matrix obtained by reducing A to tridiagonal form. π
See 'Computing Small Singular Values of Bidiagonal Matrices with Guaranteed High Relative Accuracy,' by Demmel and Kahan, LAPACK Working Note #3.
If high relative accuracy is important, set ABSTOL to DLAMCH( 'Safe minimum' ). Doing so will guarantee that eigenvalues are computed to high relative accuracy when possible in future releases. The current code does not make any guarantees about high relative accuracy, but future releases will. See J. Barlow and J. Demmel, 'Computing Accurate Eigensystems of Scaled Diagonally Dominant Matrices', LAPACK Working Note #7, for a discussion of which matrices define their eigenvalues to high relative accuracy. π₯
M
M is INTEGER
The total number of eigenvalues found. 0 <= M <= N. If RANGE = 'A', M = N, and if RANGE = 'I', M = IU-IL+1.
W
W is DOUBLE PRECISION array, dimension (N)
The first M elements contain the selected eigenvalues in ascending order. β¨
Zβ aDOUBLE PRECISIONarray, dimension(LDZ, max(1,M)).
If JOBZ = 'V', then when INFO = 0, the first M columns of Z hold the orthonormal eigenvectors of the matrix A that go with the eigenvalues you picked β and the i-th column of Z carries the eigenvector for W(i). π
If JOBZ = 'N', then honestly Z is just not referenced, she's off the clock.
β οΈ Bestie, listen: you have to make sure at leastmax(1,M)columns are supplied in theZarray. And ifRANGE = 'V', the exact value ofMis not known in advance, so you gotta use an upper bound. SupplyingNcolumns is always safe, no cap. π«Ά
LDZβINTEGER. The leading dimension of the arrayZ.LDZ >= 1, and ifJOBZ = 'V', thenLDZ >= max(1,N). That's the vibe check. β¨ISUPPZβINTEGERarray, dimension( 2*max(1,M) ). This is the support of the eigenvectors inZ, like, the indices that tell you which elements inZare nonzero. The i-th eigenvector is nonzero only in elementsISUPPZ( 2*i-1 )throughISUPPZ( 2*i ). This one is an output ofDSTEMR(tridiagonal matrix moment π§). The support of the eigenvectors ofAis typically1:Nbecause of the orthogonal transformations applied byDORMTR.
Heads up: this is implemented only forRANGE = 'A'or'I'andIU - IL = N - 1. Anything else and it's giving... not available, bestie. π
WORKβDOUBLE PRECISIONarray, dimension(MAX(1,LWORK)). On exit, ifINFO = 0, thenWORK(1)returns the optimalLWORK. Iconic little self-report. πLWORKβINTEGER. The dimension of the arrayWORK.
If JOBZ = 'N' and N > 1, LWORK must be queried. Like, mandatory.
LWORK = MAX(1, 26*N, dimension) where
dimension = max(stage1,stage2) + (KD+1)*N + 5*N
= N*KD + N*max(KD+1,FACTOPTNB)
+ max(2*KD*KD, KD*NTHREADS)
+ (KD+1)*N + 5*N
where KD is the blocking size of the reduction, FACTOPTNB is the blocking used by the QR or LQ algorithm β usually FACTOPTNB=128 is a good choice, fr fr β and NTHREADS is the number of threads used when openMP compilation is enabled, otherwise =1.
If JOBZ = 'V' and N > 1, LWORK must be queried. Not yet available. π
If LWORK = -1, then a workspace query is assumed β the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and XERBLA will not be issuing any error message related to LWORK. She's minding her business. π
IWORKβINTEGERarray, dimension(MAX(1,LIWORK)). On exit, ifINFO = 0, thenIWORK(1)returns the optimalLWORK. (Yes, it saysLWORK. We don't make the rules. π)LIWORKβINTEGER. The dimension of the arrayIWORK.LIWORK >= max(1,10*N).
If LIWORK = -1, then a workspace query is assumed β the routine only calculates the optimal size of the IWORK array, returns this value as the first entry of the IWORK array, and no error message related to LIWORK is issued by XERBLA. Same energy as above. β¨
INFOβINTEGER.= 0: successful exit π< 0: ifINFO = -i, the i-th argument had an illegal value π> 0: Internal error π¬
πΈ Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
π«Ά Contributors:
- Inderjit Dhillon, IBM Almaden, USA
- Osni Marques, LBNL/NERSC, USA
- Ken Stanley, Computer Science Division, University of California at Berkeley, USA
- Jason Riedy, Computer Science Division, University of California at Berkeley, USA
π Further Details:
All details about the 2stage techniques are available in:
Azzam Haidar, Hatem Ltaief, and Jack Dongarra. Parallel reduction to condensed forms for symmetric eigenvalue problems using aggregated fine-grained and memory-aware kernels. In Proceedings of 2011 International Conference for High Performance Computing, Networking, Storage and Analysis (SC '11), New York, NY, USA, Article 8 , 11 pages. http://doi.acm.org/10.1145/2063384.2063394
A. Haidar, J. Kurzak, P. Luszczek, 2013. An improved parallel singular value algorithm and its implementation for multicore hardware, In Proceedings of 2013 International Conference for High Performance Computing, Networking, Storage and Analysis (SC '13). Denver, Colorado, USA, 2013. Article 90, 12 pages. http://doi.acm.org/10.1145/2503210.2503292
A. Haidar, R. Solca, S. Tomov, T. Schulthess and J. Dongarra. A novel hybrid CPU-GPU generalized eigensolver for electronic structure calculations based on fine-grained memory aware tasks. International Journal of High Performance Computing Applications. Volume 28 Issue 2, Pages 196-209, May 2014. http://hpc.sagepub.com/content/28/2/196
β¨ subroutine dsyevx β¨
subroutine dsyevx (character JOBZ, character RANGE, character UPLO, integer
N, double precision, dimension( lda, * ) A, integer LDA, double
precision VL, double precision VU, integer IL, integer IU, double
precision ABSTOL, integer M, double precision, dimension( * ) W, double
precision, dimension( ldz, * ) Z, integer LDZ, double precision,
dimension( * ) WORK, integer LWORK, integer, dimension( * ) IWORK,
integer, dimension( * ) IFAIL, integer INFO)
DSYEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matrices.
π― Purpose:
DSYEVX computes selected eigenvalues and, optionally, eigenvectors of a real symmetric matrix A. Eigenvalues and eigenvectors can be selected by specifying either a range of values or a range of indices for the desired eigenvalues. Pick your fighter. π₯
π Parameters
JOBZβJOBZ is CHARACTER*1= 'N': Compute eigenvalues only;= 'V': Compute eigenvalues and eigenvectors.
RANGEβRANGE is CHARACTER*1= 'A': all eigenvalues will be found.= 'V': all eigenvalues in the half-open interval(VL,VU]will be found.= 'I': theIL-th throughIU-th eigenvalues will be found.
UPLOβUPLO is CHARACTER*1= 'U': Upper triangle ofAis stored;= 'L': Lower triangle ofAis stored.
NβN is INTEGER. The order of the matrixA.N >= 0.AβA is DOUBLE PRECISION array, dimension (LDA, N). On entry, the symmetric matrixA. IfUPLO = 'U', the leadingN-by-Nupper triangular part ofAcontains the upper triangular part of the matrixA. IfUPLO = 'L', the leadingN-by-Nlower triangular part ofAcontains the lower triangular part of the matrixA.
π On exit, the lower triangle (ifUPLO='L') or the upper triangle (ifUPLO='U') ofA, including the diagonal, is destroyed. She does not survive this. Rip.
LDAβLDA is INTEGER. The leading dimension of the arrayA.LDA >= max(1,N).VLβVL is DOUBLE PRECISION. IfRANGE='V', the lower bound of the interval to be searched for eigenvalues.VL < VU. Not referenced ifRANGE = 'A'or'I'.VUβVU is DOUBLE PRECISION. IfRANGE='V', the upper bound of the interval to be searched for eigenvalues.VL < VU. Not referenced ifRANGE = 'A'or'I'.ILβIL is INTEGER. IfRANGE='I', the index of the smallest eigenvalue to be returned.1 <= IL <= IU <= N, ifN > 0;IL = 1andIU = 0ifN = 0. Not referenced ifRANGE = 'A'or'V'.IUβIU is INTEGER. IfRANGE='I', the index of the largest eigenvalue to be returned.1 <= IL <= IU <= N, ifN > 0;IL = 1andIU = 0ifN = 0. Not referenced ifRANGE = 'A'or'V'.ABSTOLβABSTOL is DOUBLE PRECISION. The absolute error tolerance for the eigenvalues. An approximate eigenvalue is accepted as converged when it is determined to lie in an interval[a,b]of width less than or equal to
ABSTOL + EPS * max( |a|,|b| ) ,
where EPS is the machine precision. If ABSTOL is less than or equal to zero, then EPS*|T| will be used in its place, where |T| is the 1-norm of the tridiagonal matrix obtained by reducing A to tridiagonal form.
Eigenvalues will be computed most accurately when ABSTOL is set to twice the underflow threshold 2*DLAMCH('S'), not zero. If this routine returns with INFO>0, indicating that some eigenvectors did not converge, try setting ABSTOL to 2*DLAMCH('S'). π
See 'Computing Small Singular Values of Bidiagonal Matrices with Guaranteed High Relative Accuracy,' by Demmel and Kahan, LAPACK Working Note #3.
MβM is INTEGER. The total number of eigenvalues found.0 <= M <= N. IfRANGE = 'A',M = N, and ifRANGE = 'I',M = IU-IL+1.WβW is DOUBLE PRECISION array, dimension (N). On normal exit, the firstMelements contain the selected eigenvalues in ascending order. Sorted, as she should be. πZZβ it's aDOUBLE PRECISIONarray, dimension(LDZ, max(1,M)). So ifJOBZ = 'V', then ifINFO = 0, the firstMcolumns ofZcontain the orthonormal eigenvectors of the matrixAcorresponding to the selected eigenvalues, with the i-th column ofZholding the eigenvector associated withW(i). If an eigenvector fails to converge, then that column ofZcontains the latest approximation to the eigenvector, and the index of the eigenvector is returned inIFAIL. IfJOBZ = 'N', thenZis not referenced. Note: the user must ensure that at leastmax(1,M)columns are supplied in the arrayZ; ifRANGE = 'V', the exact value ofMis not known in advance and an upper bound must be used. β¨LDZβINTEGER. The leading dimension of the arrayZ.LDZ >= 1, and ifJOBZ = 'V',LDZ >= max(1,N). Periodt. πWORKβDOUBLE PRECISIONarray, dimension(MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK. πLWORKβINTEGER. The length of the arrayWORK.LWORK >= 1, whenN <= 1; otherwise8*N. For optimal efficiency,LWORK >= (NB+3)*N, whereNBis the max of the blocksize forDSYTRDandDORMTRreturned byILAENV. IfLWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of theWORKarray, returns this value as the first entry of theWORKarray, and no error message related toLWORKis issued byXERBLA. π«ΆIWORKβINTEGERarray, dimension(5*N). That's it, that's the tweet. π¦IFAILβINTEGERarray, dimension(N). IfJOBZ = 'V', then ifINFO = 0, the firstMelements ofIFAILare zero. IfINFO > 0, thenIFAILcontains the indices of the eigenvectors that failed to converge. IfJOBZ = 'N', thenIFAILis not referenced. πINFOβINTEGER.= 0: successful exit π< 0: ifINFO = -i, the i-th argument had an illegal value π> 0: ifINFO = i, thenieigenvectors failed to converge. Their indices are stored in arrayIFAIL. π
β¨ Author β¨
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
subroutine dsyevx_2stage
subroutine dsyevx_2stage (character JOBZ, character RANGE, character UPLO,
integer N, double precision, dimension( lda, * ) A, integer LDA, double
precision VL, double precision VU, integer IL, integer IU, double
precision ABSTOL, integer M, double precision, dimension( * ) W, double
precision, dimension( ldz, * ) Z, integer LDZ, double precision,
dimension( * ) WORK, integer LWORK, integer, dimension( * ) IWORK,
integer, dimension( * ) IFAIL, integer INFO)
DSYEVX_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matrices. Iconic. π
Purpose
DSYEVX_2STAGE computes selected eigenvalues and, optionally, eigenvectors of a real symmetric matrix A using the 2stage technique for the reduction to tridiagonal. Eigenvalues and eigenvectors can be selected by specifying either a range of values or a range of indices for the desired eigenvalues. Slay. π
Parameters
JOBZβJOBZ is CHARACTER*1= 'N': Compute eigenvalues only;= 'V': Compute eigenvalues and eigenvectors. Not available in this release. π«
RANGEβRANGE is CHARACTER*1= 'A': all eigenvalues will be found.= 'V': all eigenvalues in the half-open interval(VL,VU]will be found.= 'I': theIL-th throughIU-th eigenvalues will be found.
UPLOβUPLO is CHARACTER*1= 'U': Upper triangle ofAis stored;= 'L': Lower triangle ofAis stored.
NβN is INTEGERThe order of the matrixA.N >= 0.AβA is DOUBLE PRECISION array, dimension (LDA, N)On entry, the symmetric matrixA. IfUPLO = 'U', the leadingN-by-Nupper triangular part ofAcontains the upper triangular part of the matrixA. IfUPLO = 'L', the leadingN-by-Nlower triangular part ofAcontains the lower triangular part of the matrixA. On exit, the lower triangle (ifUPLO='L') or the upper triangle (ifUPLO='U') ofA, including the diagonal, is destroyed. πLDAβLDA is INTEGERThe leading dimension of the arrayA.LDA >= max(1,N).VLβVL is DOUBLE PRECISIONIfRANGE='V', the lower bound of the interval to be searched for eigenvalues.VL < VU. Not referenced ifRANGE = 'A'or'I'.VUβVU is DOUBLE PRECISIONIfRANGE='V', the upper bound of the interval to be searched for eigenvalues.VL < VU. Not referenced ifRANGE = 'A'or'I'.ILβIL is INTEGERIfRANGE='I', the index of the smallest eigenvalue to be returned.1 <= IL <= IU <= N, ifN > 0;IL = 1andIU = 0ifN = 0. Not referenced ifRANGE = 'A'or'V'.IUβIU is INTEGERIfRANGE='I', the index of the largest eigenvalue to be returned.1 <= IL <= IU <= N, ifN > 0;IL = 1andIU = 0ifN = 0. Not referenced ifRANGE = 'A'or'V'.ABSTOLβABSTOL is DOUBLE PRECISIONThe absolute error tolerance for the eigenvalues. An approximate eigenvalue is accepted as converged when it is determined to lie in an interval[a,b]of width less than or equal to
ABSTOL + EPS * max( |a|,|b| ) ,
where EPS is the machine precision. If ABSTOL is less than or equal to zero, then EPS*|T| will be used in its place, where |T| is the 1-norm of the tridiagonal matrix obtained by reducing A to tridiagonal form.
Eigenvalues will be computed most accurately when ABSTOL is set to twice the underflow threshold 2*DLAMCH('S'), not zero. If this routine returns with INFO>0, indicating that some eigenvectors did not converge, try setting ABSTOL to 2*DLAMCH('S').
See 'Computing Small Singular Values of Bidiagonal Matrices with Guaranteed High Relative Accuracy,' by Demmel and Kahan, LAPACK Working Note #3.
MβM is INTEGERThe total number of eigenvalues found.0 <= M <= N. IfRANGE = 'A',M = N, and ifRANGE = 'I',M = IU-IL+1.WβW is DOUBLE PRECISION array, dimension (N)On normal exit, the firstMelements contain the selected eigenvalues in ascending order.ZβZ is DOUBLE PRECISION array, dimension (LDZ, max(1,M))IfJOBZ = 'V', then ifINFO = 0, the firstMcolumns ofZcontain the orthonormal eigenvectors of the matrixAcorresponding to the selected eigenvalues, with the i-th column ofZholding the eigenvector associated withW(i). If an eigenvector fails to converge, then that column ofZcontains the latest approximation to the eigenvector, and the index of the eigenvector is returned inIFAIL. IfJOBZ = 'N', thenZis not referenced. Note: the user must ensure that at leastmax(1,M)columns are supplied in the arrayZ; ifRANGE = 'V', the exact value ofMis not known in advance and an upper bound must be used.LDZβLDZ is INTEGERThe leading dimension of the arrayZ.LDZ >= 1, and ifJOBZ = 'V',LDZ >= max(1,N).WORKβWORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK))On exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβLWORK is INTEGERThe length of the arrayWORK.LWORK >= 1, whenN <= 1; otherwise IfJOBZ = 'N'andN > 1,LWORKmust be queried.
LWORK = MAX(1, 8*N, dimension) where
dimension = max(stage1,stage2) + (KD+1)*N + 3*N
= N*KD + N*max(KD+1,FACTOPTNB)
+ max(2*KD*KD, KD*NTHREADS)
+ (KD+1)*N + 3*N
where KD is the blocking size of the reduction,
FACTOPTNB is the blocking used by the QR or LQ
algorithm, usually FACTOPTNB=128 is a good choice
NTHREADS is the number of threads used when
openMP compilation is enabled, otherwise =1.
If JOBZ = 'V' and N > 1, LWORK must be queried. Not yet available
If LWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA.
IWORKβIWORK is INTEGER array, dimension (5*N)IFAILβIFAIL is INTEGER array, dimension (N)IfJOBZ = 'V', then ifINFO = 0, the firstMelements ofIFAILare zero. IfINFO > 0, thenIFAILcontains the indices of the eigenvectors that failed to converge. IfJOBZ = 'N', thenIFAILis not referenced.INFOβINFO is INTEGER= 0: successful exit< 0: ifINFO = -i, the i-th argument had an illegal value> 0: ifINFO = i, thenieigenvectors failed to converge. Their indices are stored in arrayIFAIL.
β¨ Author β¨
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
πΈ Further Details πΈ
okay so ALL the tea about the 2stage techniques is in these papers, no gatekeeping bestie:
Azzam Haidar, Hatem Ltaief, and Jack Dongarra.
Parallel reduction to condensed forms for symmetric eigenvalue problems
using aggregated fine-grained and memory-aware kernels. In Proceedings
of 2011 International Conference for High Performance Computing,
Networking, Storage and Analysis (SC '11), New York, NY, USA,
Article 8 , 11 pages.
http://doi.acm.org/10.1145/2063384.2063394
A. Haidar, J. Kurzak, P. Luszczek, 2013.
An improved parallel singular value algorithm and its implementation
for multicore hardware, In Proceedings of 2013 International Conference
for High Performance Computing, Networking, Storage and Analysis (SC '13).
Denver, Colorado, USA, 2013.
Article 90, 12 pages.
http://doi.acm.org/10.1145/2503210.2503292
A. Haidar, R. Solca, S. Tomov, T. Schulthess and J. Dongarra.
A novel hybrid CPU-GPU generalized eigensolver for electronic structure
calculations based on fine-grained memory aware tasks.
International Journal of High Performance Computing Applications.
Volume 28 Issue 2, Pages 196-209, May 2014.
http://hpc.sagepub.com/content/28/2/196
β¦and rounding out the author squad, last but never ever least: NAG Ltd. π«Ά
π DSYGV π
subroutine dsygv (integer ITYPE, character JOBZ, character UPLO, integer N,
double precision, dimension( lda, * ) A, integer LDA, double precision,
dimension( ldb, * ) B, integer LDB, double precision, dimension( * ) W,
double precision, dimension( * ) WORK, integer LWORK, integer INFO)
π― Purpose π―
So DSYGV computes all the eigenvalues, and optionally the eigenvectors, of a real generalized symmetric-definite eigenproblem. We're talking the form
A*x=(lambda)*B*x, A*Bx=(lambda)*x, or B*A*x=(lambda)*x.
Here A and B are assumed to be symmetric, and B is also positive definite (that part is non-negotiable bestie, no exceptions π
).
β¨ Parameters β¨
ITYPEβITYPEisINTEGER, and it's the one that tells you which problem type we're solving, so pick your fighter:= 1:A*x = (lambda)*B*x= 2:A*B*x = (lambda)*x= 3:B*A*x = (lambda)*x
JOBZβJOBZisCHARACTER*1, the vibe check on how much you want back:= 'N': compute eigenvalues only;= 'V': compute eigenvalues and eigenvectors.
UPLOβUPLOisCHARACTER*1, and it says which half of your symmetric matrices you actually bothered to store:= 'U': upper triangles ofAandBare stored;= 'L': lower triangles ofAandBare stored.
NβNisINTEGER. The order of the matricesAandB.N >= 0.AβAisDOUBLE PRECISION array, dimension (LDA, N).
On entry: the symmetric matrix A. If UPLO = 'U', the leading N-by-N upper triangular part of A contains the upper triangular part of the matrix A. If UPLO = 'L', the leading N-by-N lower triangular part of A contains the lower triangular part of the matrix A.
On exit, if JOBZ = 'V', then if INFO = 0, A contains the matrix Z of eigenvectors. The eigenvectors are normalized as follows:
- if
ITYPE = 1or2,Z**T*B*Z = I; - if
ITYPE = 3,Z**T*inv(B)*Z = I.
If JOBZ = 'N', then on exit the upper triangle (if UPLO='U') or the lower triangle (if UPLO='L') of A, including the diagonal, is destroyed π (she's gone, she's not coming back).
LDAβLDAisINTEGER. The leading dimension of the arrayA.LDA >= max(1,N).BβBisDOUBLE PRECISION array, dimension (LDB, N).
On entry: the symmetric positive definite matrix B. If UPLO = 'U', the leading N-by-N upper triangular part of B contains the upper triangular part of the matrix B. If UPLO = 'L', the leading N-by-N lower triangular part of B contains the lower triangular part of the matrix B.
On exit, if INFO <= N, the part of B containing the matrix is overwritten by the triangular factor U or L from the Cholesky factorization B = U**T*U or B = L*L**T.
LDBβLDBisINTEGER. The leading dimension of the arrayB.LDB >= max(1,N).WβWisDOUBLE PRECISION array, dimension (N). IfINFO = 0, the eigenvalues in ascending order. βWORKβWORKisDOUBLE PRECISION array, dimension (MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβLWORKisINTEGER. The length of the arrayWORK.LWORK >= max(1,3*N-1). For optimal efficiency,LWORK >= (NB+2)*N, whereNBis the blocksize forDSYTRDreturned byILAENV.
Heads up: ifLWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of theWORKarray, returns this value as the first entry of theWORKarray, and no error message related toLWORKis issued byXERBLA. sneaky but legal β¨
INFOβINFOisINTEGER. The receipts:= 0: successful exit π< 0: ifINFO = -i, thei-th argument had an illegal value> 0:DPOTRForDSYEVreturned an error code:<= N: ifINFO = i,DSYEVfailed to converge;ioff-diagonal elements of an intermediate tridiagonal form did not converge to zero;> N: ifINFO = N + i, for1 <= i <= N, then the leading minor of orderiofBis not positive definite. The factorization ofBcould not be completed and no eigenvalues or eigenvectors were computed π
π Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π¦ DSYGV_2STAGE π¦
subroutine dsygv_2stage (integer ITYPE, character JOBZ, character UPLO,
integer N, double precision, dimension( lda, * ) A, integer LDA, double
precision, dimension( ldb, * ) B, integer LDB, double precision,
dimension( * ) W, double precision, dimension( * ) WORK, integer LWORK,
integer INFO)
π― Purpose π―
DSYGV_2STAGE computes all the eigenvalues, and optionally the eigenvectors, of a real generalized symmetric-definite eigenproblem, of the form
A*x=(lambda)*B*x, A*Bx=(lambda)*x, or B*A*x=(lambda)*x.
Here A and B are assumed to be symmetric and B is also positive definite. This routine use the 2stage technique for the reduction to tridiagonal, which showed higher performance on recent architecture and for large sizes N>2000. she's built different fr fr π₯
β¨ Parameters β¨
ITYPEβITYPEisINTEGER. Specifies the problem type to be solved:= 1:A*x = (lambda)*B*x= 2:A*B*x = (lambda)*x= 3:B*A*x = (lambda)*x
JOBZβJOBZisCHARACTER*1.= 'N': compute eigenvalues only;= 'V': compute eigenvalues and eigenvectors. Not available in this release. π«
UPLOβUPLOisCHARACTER*1.= 'U': upper triangles ofAandBare stored;= 'L': lower triangles ofAandBare stored.
NβNisINTEGER. The order of the matricesAandB.N >= 0.AβAisDOUBLE PRECISION array, dimension (LDA, N).
On entry: the symmetric matrix A. If UPLO = 'U', the leading N-by-N upper triangular part of A contains the upper triangular part of the matrix A. If UPLO = 'L', the leading N-by-N lower triangular part of A contains the lower triangular part of the matrix A.
On exit, if JOBZ = 'V', then if INFO = 0, A contains the matrix Z of eigenvectors. The eigenvectors are normalized as follows:
- if
ITYPE = 1or2,Z**T*B*Z = I; - if
ITYPE = 3,Z**T*inv(B)*Z = I.
If JOBZ = 'N', then on exit the upper triangle (if UPLO='U') or the lower triangle (if UPLO='L') of A, including the diagonal, is destroyed π
LDAβLDAisINTEGER. The leading dimension of the arrayA.LDA >= max(1,N).BβBisDOUBLE PRECISION array, dimension (LDB, N).
On entry: the symmetric positive definite matrix B. If UPLO = 'U', the leading N-by-N upper triangular part of B contains the upper triangular part of the matrix B. If UPLO = 'L', the leading N-by-N lower triangular part of B contains the lower triangular part of the matrix B.
On exit, if INFO <= N, the part of B containing the matrix is overwritten by the triangular factor U or L from the Cholesky factorization B = U**T*U or B = L*L**T.
LDBβLDBisINTEGER. The leading dimension of the arrayB.LDB >= max(1,N).WβWisDOUBLE PRECISION array, dimension (N). IfINFO = 0, the eigenvalues in ascending order. βWORKβWORKisDOUBLE PRECISION array, dimension (MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβLWORKisINTEGER. The length of the arrayWORK.LWORK >= 1, whenN <= 1; otherwiseβ¦
If JOBZ = 'N' and N > 1, LWORK must be queried.
LWORK = MAX(1, dimension) where
dimension = max(stage1,stage2) + (KD+1)*N + 2*N
= N*KD + N*max(KD+1,FACTOPTNB)
+ max(2*KD*KD, KD*NTHREADS)
+ (KD+1)*N + 2*N
where KD is the blocking size of the reduction,
FACTOPTNB is the blocking used by the QR or LQ
algorithm, usually FACTOPTNB=128 is a good choice
NTHREADS is the number of threads used when
openMP compilation is enabled, otherwise =1.
If JOBZ = 'V' and N > 1, LWORK must be queried. Not yet available
If LWORK = -1, bestie, itβs a workspace query moment: the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA. Slay.
INFO is INTEGER π
= 0: successful exit, we love to see it β¨< 0: ifINFO = -i, the i-th argument had an illegal value π> 0:DPOTRForDSYEVreturned an error code:<= N: ifINFO = i,DSYEVfailed to converge; i off-diagonal elements of an intermediate tridiagonal form did not converge to zero;> N: ifINFO = N + i, for1 <= i <= N, then the leading minor of order i of B is not positive definite. The factorization of B could not be completed and no eigenvalues or eigenvectors were computed.
Author π«Ά
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Further Details π
All details about the 2stage techniques are available in:
- Azzam Haidar, Hatem Ltaief, and Jack Dongarra. Parallel reduction to condensed forms for symmetric eigenvalue problems using aggregated fine-grained and memory-aware kernels. In Proceedings of 2011 International Conference for High Performance Computing, Networking, Storage and Analysis (SC '11), New York, NY, USA, Article 8 , 11 pages.
http://doi.acm.org/10.1145/2063384.2063394 - A. Haidar, J. Kurzak, P. Luszczek, 2013. An improved parallel singular value algorithm and its implementation for multicore hardware, In Proceedings of 2013 International Conference for High Performance Computing, Networking, Storage and Analysis (SC '13). Denver, Colorado, USA, 2013. Article 90, 12 pages.
http://doi.acm.org/10.1145/2503210.2503292 - A. Haidar, R. Solca, S. Tomov, T. Schulthess and J. Dongarra. A novel hybrid CPU-GPU generalized eigensolver for electronic structure calculations based on fine-grained memory aware tasks. International Journal of High Performance Computing Applications. Volume 28 Issue 2, Pages 196-209, May 2014.
http://hpc.sagepub.com/content/28/2/196
subroutine dsygvd π
subroutine dsygvd (integer ITYPE, character JOBZ, character UPLO, integer N,
double precision, dimension( lda, * ) A, integer LDA, double precision,
dimension( ldb, * ) B, integer LDB, double precision, dimension( * ) W,
double precision, dimension( * ) WORK, integer LWORK, integer,
dimension( * ) IWORK, integer LIWORK, integer INFO)
DSYGVD
Purpose β¨
DSYGVD computes all the eigenvalues, and optionally, the eigenvectors of a real generalized symmetric-definite eigenproblem, of the form A*x=(lambda)*B*x, A*Bx=(lambda)*x, or B*A*x=(lambda)*x. Here A and B are assumed to be symmetric and B is also positive definite. If eigenvectors are desired, it uses a divide and conquer algorithm.
The divide and conquer algorithm makes very mild assumptions about floating point arithmetic. It will work on machines with a guard digit in add/subtract, or on those binary machines without guard digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It could conceivably fail on hexadecimal or decimal machines without guard digits, but we know of none.
Parameters π
ITYPEβITYPEisINTEGER. Specifies the problem type to be solved:= 1:A*x = (lambda)*B*x= 2:A*B*x = (lambda)*x= 3:B*A*x = (lambda)*x
JOBZβJOBZisCHARACTER*1.= 'N': Compute eigenvalues only;= 'V': Compute eigenvalues and eigenvectors.
UPLOβUPLOisCHARACTER*1.= 'U': Upper triangles of A and B are stored;= 'L': Lower triangles of A and B are stored.
NβNisINTEGER. The order of the matrices A and B.N >= 0.AβAisDOUBLE PRECISIONarray, dimension(LDA, N). On entry, the symmetric matrix A. IfUPLO = 'U', the leading N-by-N upper triangular part of A contains the upper triangular part of the matrix A. IfUPLO = 'L', the leading N-by-N lower triangular part of A contains the lower triangular part of the matrix A.
On exit, if JOBZ = 'V', then if INFO = 0, A contains the matrix Z of eigenvectors. The eigenvectors are normalized as follows: if ITYPE = 1 or 2, Z**T*B*Z = I; if ITYPE = 3, Z**T*inv(B)*Z = I. If JOBZ = 'N', then on exit the upper triangle (if UPLO='U') or the lower triangle (if UPLO='L') of A, including the diagonal, is destroyed.
LDAβLDAisINTEGER. The leading dimension of the array A.LDA >= max(1,N).BβBisDOUBLE PRECISIONarray, dimension(LDB, N). On entry, the symmetric matrix B. IfUPLO = 'U', the leading N-by-N upper triangular part of B contains the upper triangular part of the matrix B. IfUPLO = 'L', the leading N-by-N lower triangular part of B contains the lower triangular part of the matrix B.
On exit, if INFO <= N, the part of B containing the matrix is overwritten by the triangular factor U or L from the Cholesky factorization B = U**T*U or B = L*L**T.
LDBβLDBisINTEGER. The leading dimension of the array B.LDB >= max(1,N).WβWisDOUBLE PRECISIONarray, dimension(N). IfINFO = 0, the eigenvalues in ascending order.WORKβWORKisDOUBLE PRECISIONarray, dimension(MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβLWORKisINTEGER. The dimension of the arrayWORK.- If
N <= 1,LWORK >= 1. - If
JOBZ = 'N'andN > 1,LWORK >= 2*N+1. - If
JOBZ = 'V'andN > 1,LWORK >= 1 + 6*N + 2*N**2.
- If
If LWORK = -1, then a workspace query is assumed; the routine only calculates the optimal sizes of the WORK and IWORK arrays, returns these values as the first entries of the WORK and IWORK arrays, and no error message related to LWORK or LIWORK is issued by XERBLA.
IWORKβIWORKisINTEGERarray, dimension(MAX(1,LIWORK)). On exit, ifINFO = 0,IWORK(1)returns the optimalLIWORK.LIWORKβLIWORKisINTEGER. The dimension of the arrayIWORK.- If
N <= 1,LIWORK >= 1. - If
JOBZ = 'N'andN > 1,LIWORK >= 1. - If
JOBZ = 'V'andN > 1,LIWORK >= 3 + 5*N.
- If
If LIWORK = -1, then a workspace query is assumed; the routine only calculates the optimal sizes of the WORK and IWORK arrays, returns these values as the first entries of the WORK and IWORK arrays, and no error message related to LWORK or LIWORK is issued by XERBLA.
INFOβINFOisINTEGER.= 0: successful exit< 0: ifINFO = -i, the i-th argument had an illegal value> 0:DPOTRForDSYEVDreturned an error code:<= N: ifINFO = iandJOBZ = 'N', then the algorithm failed to converge; i off-diagonal elements of an intermediate tridiagonal form did not converge to zero; ifINFO = iandJOBZ = 'V', then the algorithm failed to compute an eigenvalue while working on the submatrix lying in rows and columnsINFO/(N+1)throughmod(INFO,N+1);> N: ifINFO = N + i, for1 <= i <= N, then the leading minor of order i of B is not positive definite. The factorization of B could not be completed and no eigenvalues or eigenvectors were computed.
Author π«Ά
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Further Details π
Modified so that no backsubstitution is performed if DSYEVD fails to converge (NEIG in old code could be greater than N causing out of bounds reference to A - reported by Ralf Meyer). Also corrected the description of INFO and the test on ITYPE. Sven, 16 Feb 05.
Contributors: π
- Mark Fahey, Department of Mathematics, Univ. of Kentucky, USA
subroutine dsygvx π
subroutine dsygvx (integer ITYPE, character JOBZ, character RANGE, character
UPLO, integer N, double precision, dimension( lda, * ) A, integer LDA,
double precision, dimension( ldb, * ) B, integer LDB, double precision
VL, double precision VU, integer IL, integer IU, double precision
ABSTOL, integer M, double precision, dimension( * ) W, double precision,
dimension( ldz, * ) Z, integer LDZ, double precision, dimension( * )
WORK, integer LWORK, integer, dimension( * ) IWORK, integer, dimension(
* ) IFAIL, integer INFO)
DSYGVX
Purpose β¨
DSYGVX computes selected eigenvalues, and optionally, eigenvectors of a real generalized symmetric-definite eigenproblem, of the form A*x=(lambda)*B*x, A*Bx=(lambda)*x, or B*A*x=(lambda)*x. Here A and B are assumed to be symmetric and B is also positive definite. Eigenvalues and eigenvectors can be selected by specifying either a range of values or a range of indices for the desired eigenvalues.
Parameters π
ITYPEβITYPEisINTEGER. Specifies the problem type to be solved:= 1:A*x = (lambda)*B*x= 2:A*B*x = (lambda)*x= 3:B*A*x = (lambda)*x
JOBZβJOBZisCHARACTER*1.= 'N': Compute eigenvalues only;= 'V': Compute eigenvalues and eigenvectors.
RANGEβRANGEisCHARACTER*1.= 'A': all eigenvalues will be found.= 'V': all eigenvalues in the half-open interval(VL,VU]will be found.= 'I': theIL-th throughIU-th eigenvalues will be found.
okay bestie, now for the part where we meet every single parameter. yes, all of them. no skipping. we're sipping the parameter tea, and it's hot. βπ
UPLOβUPLOisCHARACTER*1and it's giving triangle energy:= 'U': the upper triangle ofAandBare stored;= 'L': the lower triangle ofAandBare stored.
NβNisINTEGER. the order of the matrix pencil(A,B).N >= 0.AβAisDOUBLE PRECISIONarray, dimension(LDA, N). on entry, the symmetric matrixA. ifUPLO = 'U', the leadingN-by-Nupper triangular part ofAcontains the upper triangular part of the matrixA. ifUPLO = 'L', the leadingN-by-Nlower triangular part ofAcontains the lower triangular part of the matrixA.
on exit, the lower triangle (if UPLO='L') or the upper triangle (if UPLO='U') of A, including the diagonal, is destroyed. π (not me, it's literally destroyed)
LDAβLDAisINTEGER. the leading dimension of the arrayA.LDA >= max(1,N).BβBisDOUBLE PRECISIONarray, dimension(LDB, N). on entry, the symmetric matrixB. ifUPLO = 'U', the leadingN-by-Nupper triangular part ofBcontains the upper triangular part of the matrixB. ifUPLO = 'L', the leadingN-by-Nlower triangular part ofBcontains the lower triangular part of the matrixB.
on exit, if INFO <= N, the part of B containing the matrix is overwritten by the triangular factor U or L from the Cholesky factorization B = U**T*U or B = L*L**T. slay.
LDBβLDBisINTEGER. the leading dimension of the arrayB.LDB >= max(1,N).VLβVLisDOUBLE PRECISION. ifRANGE='V', the lower bound of the interval to be searched for eigenvalues.VL < VU. not referenced ifRANGE = 'A'or'I'.VUβVUisDOUBLE PRECISION. ifRANGE='V', the upper bound of the interval to be searched for eigenvalues.VL < VU. not referenced ifRANGE = 'A'or'I'.ILβILisINTEGER. ifRANGE='I', the index of the smallest eigenvalue to be returned.1 <= IL <= IU <= N, ifN > 0;IL = 1andIU = 0ifN = 0. not referenced ifRANGE = 'A'or'V'.IUβIUisINTEGER. ifRANGE='I', the index of the largest eigenvalue to be returned.1 <= IL <= IU <= N, ifN > 0;IL = 1andIU = 0ifN = 0. not referenced ifRANGE = 'A'or'V'.ABSTOLβABSTOLisDOUBLE PRECISION. the absolute error tolerance for the eigenvalues. an approximate eigenvalue is accepted as converged when it is determined to lie in an interval[a,b]of width less than or equal toABSTOL + EPS * max( |a|,|b| ) ,whereEPSis the machine precision. ifABSTOLis less than or equal to zero, thenEPS*|T|will be used in its place, where|T|is the 1-norm of the tridiagonal matrix obtained by reducingCto tridiagonal form, whereCis the symmetric matrix of the standard symmetric problem to which the generalized problem is transformed.
eigenvalues will be computed most accurately when ABSTOL is set to twice the underflow threshold 2*DLAMCH('S'), not zero. if this routine returns with INFO>0, indicating that some eigenvectors did not converge, try setting ABSTOL to 2*DLAMCH('S'). π‘
MβMisINTEGER. the total number of eigenvalues found.0 <= M <= N. ifRANGE = 'A',M = N, and ifRANGE = 'I',M = IU-IL+1.WβWisDOUBLE PRECISIONarray, dimension(N). on normal exit, the firstMelements contain the selected eigenvalues in ascending order.ZβZisDOUBLE PRECISIONarray, dimension(LDZ, max(1,M)). ifJOBZ = 'N', thenZis not referenced. ifJOBZ = 'V', then ifINFO = 0, the firstMcolumns ofZcontain the orthonormal eigenvectors of the matrixAcorresponding to the selected eigenvalues, with the i-th column ofZholding the eigenvector associated withW(i). the eigenvectors are normalized as follows: ifITYPE = 1or2,Z**T*B*Z = I; ifITYPE = 3,Z**T*inv(B)*Z = I.
if an eigenvector fails to converge, then that column of Z contains the latest approximation to the eigenvector, and the index of the eigenvector is returned in IFAIL. note: the user must ensure that at least max(1,M) columns are supplied in the array Z; if RANGE = 'V', the exact value of M is not known in advance and an upper bound must be used. π«Ά
LDZβLDZisINTEGER. the leading dimension of the arrayZ.LDZ >= 1, and ifJOBZ = 'V',LDZ >= max(1,N).WORKβWORKisDOUBLE PRECISIONarray, dimension(MAX(1,LWORK)). on exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβLWORKisINTEGER. the length of the arrayWORK.LWORK >= max(1,8*N). for optimal efficiency,LWORK >= (NB+3)*N, whereNBis the blocksize forDSYTRDreturned byILAENV.
if LWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA.
IWORKβIWORKisINTEGERarray, dimension(5*N).IFAILβIFAILisINTEGERarray, dimension(N). ifJOBZ = 'V', then ifINFO = 0, the firstMelements ofIFAILare zero. ifINFO > 0, thenIFAILcontains the indices of the eigenvectors that failed to converge. ifJOBZ = 'N', thenIFAILis not referenced.INFOβINFOisINTEGER:= 0: successful exit π< 0: ifINFO = -i, the i-th argument had an illegal value> 0:DPOTRForDSYEVXreturned an error code:<= N: ifINFO = i,DSYEVXfailed to converge;ieigenvectors failed to converge. their indices are stored in arrayIFAIL.> N: ifINFO = N + i, for1 <= i <= N, then the leading minor of orderiofBis not positive definite. the factorization ofBcould not be completed and no eigenvalues or eigenvectors were computed.
β¨ Author β¨
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
πΈ Contributors πΈ
- Mark Fahey, Department of Mathematics, Univ. of Kentucky, USA
β¨ Author (the encore) β¨
Generated automatically by Doxygen for LAPACK from the source code.
and that's the whole vibe, bestie. this page was auto-generated for LAPACK, version 3.11.0, dated Sun Nov 27 2022, and it's doubleSYeigen(3). now go slay those eigenvalues. bye πβ¨
π¦ where this page comes from
- debian bookworm: liblapack-doc 3.11.0-2 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms