SRC/dsyevd.f(3)
π SRC/dsyevd.f β like, the LAPACK manual page, bestie
okay so this is a page from the LAPACK Library Functions Manual, and it's all about dsyevd β one little subroutine that does so much. Sit down, grab a strawberry π, we're gonna go through it together, no cap.
β¨ SYNOPSIS β¨
functions / subroutines π«Ά
subroutine 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 matrices β that's the one-liner, and honestly? iconic.
πΈ Function/Subroutine Documentation πΈ
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)
DSYEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matrices. periodt. π
π 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.
Because of large use of BLAS of level 3, DSYEVD needs N**2 more workspace than DSYEVX.
so yeah β the algorithm is that girl (divide and conquer), but she charges rent in workspace. NΒ² extra, bestie. budget accordingly. π
π₯ Parameters π₯
JOBZβ it'sCHARACTER*1, and here's the vibe check:= 'N': compute eigenvalues only;= 'V': compute eigenvalues and eigenvectors.
UPLOβ alsoCHARACTER*1, pick your triangle:= 'U': upper triangle of A is stored;= 'L': lower triangle of A is stored.
NβINTEGER, the order of the matrix A. Constraint:N >= 0. (zero is fine, don't stress π§)AβDOUBLE PRECISIONarray, dimension(LDA, N). On entry, it's the symmetric matrix A: ifUPLO = 'U', the leading N-by-N upper triangular part of A holds the upper triangular part of the matrix A; ifUPLO = 'L', the leading N-by-N lower triangular part of A holds 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.
β οΈ but ifJOBZ = 'N', then on exit the lower triangle (ifUPLO='L') or the upper triangle (ifUPLO='U') of A, including the diagonal, is destroyed. gone. deceased. π
LDAβINTEGER, the leading dimension of the array A. NeedsLDA >= max(1,N). respect the leading dimension, it's the main character.WβDOUBLE PRECISIONarray, dimension(N). IfINFO = 0, the eigenvalues come out in ascending order. cute and organized πΈWORKβDOUBLE PRECISIONarray, dimension(MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK. she tells you the size she actually wanted. πLWORKβINTEGER, the dimension of the arrayWORK. the lore:- 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
and ifLWORK = -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. so yes,-1is a legit move, it's the "just tell me the size bestie" flag. β¨
IWORKβINTEGERarray, dimension(MAX(1,LIWORK)). On exit, ifINFO = 0,IWORK(1)returns the optimalLIWORK.LIWORKβ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
and ifLIWORK = -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. same deal, different array π
INFOβINTEGER, the receipts:= 0: successful exit π< 0: ifINFO = -i, the i-th argument had an illegal value> 0: ifINFO = iandJOBZ = 'N', then the algorithm failed to converge; i off-diagonal elements of an intermediate tridiagonal form did not converge to zero;
if INFO = i and JOBZ = 'V', then 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).
π yeah. if you see a positive INFO, do the math above to find exactly which submatrix ghosted you.
π 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.
shoutout Sven for the INFO glow-up, fr fr π«Ά
Definition at line 175 of file dsyevd.f.
β Author (again, but the auto-generated one) β
Generated automatically by Doxygen for LAPACK from the source code.
and that's the whole page, bestie β every flag, every boundary, every triangle, every -1 query, all of it. slay. π
LAPACK, Version 3.12.0, SRC/dsyevd.f(3) β mwah, that's the version and date, catch you in the next manpage πβ¨π
π¦ where this page comes from
- arch rolling: lapack-doc 3.12.1-2 Β· custom
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms