SRC/zheevd.f(3)
π SRC/zheevd.f π
okay so this is a page from the Library Functions Manual β it's the LAPACK docs for zheevd, and bestie, it's giving main character energy in the eigenvalue world π
β¨ NAME β¨
SRC/zheevd.f β no cap, that's literally the whole name, it's a Fortran source file and it's iconic for it π
πΈ SYNOPSIS πΈ
π¦ Functions/Subroutines
subroutine zheevd (jobz, uplo, n, a, lda, w, work, lwork, rwork, lrwork,
iwork, liwork, info)
ZHEEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for HE matrices π₯
π Function/Subroutine Documentation
subroutine zheevd (character jobz, character uplo, integer n, complex*16,
dimension( lda, * ) a, integer lda, double precision, dimension( * ) w,
complex*16, dimension( * ) work, integer lwork, double precision,
dimension( * ) rwork, integer lrwork, integer, dimension( * ) iwork,
integer liwork, integer info)
ZHEEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for HE matrices β¨
π Purpose:
!>
!> ZHEEVD computes all eigenvalues and, optionally, eigenvectors of a
!> complex Hermitian matrix A. If eigenvectors are desired, it uses a
!> divide and conquer algorithm.
!>
!>
like, it gets all the eigenvalues (not just some, she's thorough π), and if you want eigenvectors too she'll hand those over as well β via a divide and conquer algorithm, which is lowkey the cool way to do it.
π Parameters π
JOBZβ aCHARACTER*1, the "what do you actually want from me" switch π
!> JOBZ is CHARACTER*1
!> = 'N': Compute eigenvalues only;
!> = 'V': Compute eigenvalues and eigenvectors.
!>
UPLOβ aCHARACTER*1, tells her which triangle of A you actually filled in π«Ά
!> UPLO is CHARACTER*1
!> = 'U': Upper triangle of A is stored;
!> = 'L': Lower triangle of A is stored.
!>
Nβ anINTEGER, the order of the matrixA. Constraint:N >= 0β
!> N is INTEGER
!> The order of the matrix A. N >= 0.
!>
AβCOMPLEX*16array, dimension(LDA, N). the moment β¨
!> A is COMPLEX*16 array, dimension (LDA, N)
!> On entry, the 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. 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.
!>
real talk: ifJOBZ = 'N', part ofAgets destroyed on exit β the lower triangle (ifUPLO='L') or the upper triangle (ifUPLO='U'), diagonal included. so don't come crying to her if you needed that data, she warned you π
LDAβ anINTEGER, the leading dimension of the arrayA. Constraint:LDA >= max(1,N)π¦
!> LDA is INTEGER
!> The leading dimension of the array A. LDA >= max(1,N).
!>
WβDOUBLE PRECISIONarray, dimension(N). IfINFO = 0, this is where the eigenvalues land, in ascending order π
!> W is DOUBLE PRECISION array, dimension (N)
!> If INFO = 0, the eigenvalues in ascending order.
!>
WORKβCOMPLEX*16array, dimension(MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORKπΈ
!> WORK is COMPLEX*16 array, dimension (MAX(1,LWORK))
!> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
!>
LWORKβ anINTEGER, the length of the arrayWORK. bestie, the minimums are specific:
!> LWORK is INTEGER
!> The length of the array WORK.
!> If N <= 1, LWORK must be at least 1.
!> If JOBZ = 'N' and N > 1, LWORK must be at least N + 1.
!> If JOBZ = 'V' and N > 1, LWORK must be at least 2*N + N**2.
!>
!> 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.
!>
π«Ά workspace query mode: passLWORK = -1and she won't actually do the math β she just crunches the optimal sizes ofWORK,RWORKandIWORK, drops them into the first entries of those arrays, andXERBLAstays completely quiet, no error message aboutLWORKorLRWORKorLIWORK. very demure, very mindful π
RWORKβDOUBLE PRECISIONarray, dimension(MAX(1,LRWORK)). On exit, ifINFO = 0,RWORK(1)returns the optimalLRWORKπ
!> RWORK is DOUBLE PRECISION array, dimension (MAX(1,LRWORK))
!> On exit, if INFO = 0, RWORK(1) returns the optimal LRWORK.
!>
LRWORKβ anINTEGER, the dimension of the arrayRWORK:
!> LRWORK is INTEGER
!> The dimension of the array RWORK.
!> If N <= 1, LRWORK must be at least 1.
!> If JOBZ = 'N' and N > 1, LRWORK must be at least N.
!> If JOBZ = 'V' and N > 1, LRWORK must be at least
!> 1 + 5*N + 2*N**2.
!>
!> 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.
!>
same workspace-query deal as above βLRWORK = -1means sizes only, no math, noXERBLAcomplaints β¨
IWORKβINTEGERarray, dimension(MAX(1,LIWORK)). On exit, ifINFO = 0,IWORK(1)returns the optimalLIWORKπ
!> IWORK is INTEGER array, dimension (MAX(1,LIWORK))
!> On exit, if INFO = 0, IWORK(1) returns the optimal LIWORK.
!>
LIWORKβ anINTEGER, the dimension of the arrayIWORK:
!> LIWORK is INTEGER
!> The dimension of the array IWORK.
!> If N <= 1, LIWORK must be at least 1.
!> If JOBZ = 'N' and N > 1, LIWORK must be at least 1.
!> If JOBZ = 'V' and N > 1, LIWORK must be at least 3 + 5*N.
!>
!> 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.
!>
and yes,LIWORK = -1is the third flavour of the exact same workspace query β sizes only, zeroXERBLAdrama π
INFOβ anINTEGER, the vibe report card at the end π
!> INFO is INTEGER
!> = 0: successful exit
!> < 0: if INFO = -i, the i-th argument had an illegal value
!> > 0: if INFO = i and JOBZ = '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).
!>
so like, 0 = slay, we did it. negative = you passed her a bad argument (the i-th one, specifically π). positive = the algorithm didn't converge, and the exact meaning depends on JOBZ, so read the block above carefully, it's literally spelled out π
π Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π§ Further Details:
Modified description of INFO. Sven, 16 Feb 05. (shoutout Sven, he tweaked the INFO description π«Ά)
π Contributors:
Jeff Rutter, Computer Science Division, University of California at Berkeley, USA β¨
Definition at line 196 of file zheevd.f. π
β Author β
Generated automatically by Doxygen for LAPACK from the source code. (the robot did the typing, she just did the math π )
LAPACK Β· Version 3.12.0 Β· SRC/zheevd.f(3) β okay that's the whole page bestie, go forth and diagonalize, iykyk π¦ππ
π¦ 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