hegv(3)
π hegv(3) β the {he,sy}gv girlies: eig + QR iteration π
okay so first things first, bestie: this page lives in the Library Functions Manual, and it's the whole β¨generalized symmetric / Hermitian eigenproblemβ¨ corner of the world. Two families, four subroutines, one vibe. Let's go π
πΈ NAME πΈ
hegv β literally {he,sy}gv: eig, QR iteration. that's the whole name, no cap.
β¨ SYNOPSIS β¨
π«Ά Functions
subroutine chegv (itype, jobz, uplo, n, a, lda, b, ldb, w, work, lwork,
rwork, info)
CHEGV
subroutine dsygv (itype, jobz, uplo, n, a, lda, b, ldb, w, work, lwork,
info)
DSYGV
subroutine ssygv (itype, jobz, uplo, n, a, lda, b, ldb, w, work, lwork,
info)
SSYGV
subroutine zhegv (itype, jobz, uplo, n, a, lda, b, ldb, w, work, lwork,
rwork, info)
ZHEGV
like, four icons in one synopsis block. we love a collective π
π Detailed Description π
the original page just drops the heading here and moves right along β no extra prose, minimal queen behaviour π. so we go straight to the good stuff.
π₯ Function Documentation π₯
π subroutine chegv π
subroutine chegv (integer itype, character jobz, character uplo, integer n,
complex, dimension( lda, * ) a, integer lda, complex, dimension( ldb, *
) b, integer ldb, real, dimension( * ) w, complex, dimension( * ) work,
integer lwork, real, dimension( * ) rwork, integer info)
CHEGV β the complex one, she's the main character here π¦
π Purpose π
!>!> CHEGV computes all the eigenvalues, and optionally, the eigenvectors!> of a complex generalized Hermitian-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 Hermitian and B is also!> positive definite.!>
so yeah β you hand her a Hermitian A and a Hermitian and positive-definite B, and she gives you back eigenvalues, plus eigenvectors if you ask nicely. the "positive definite" thing on B is not a suggestion btw, it's the vibe check she will absolutely enforce π
π§ Parameters π§
ITYPEβ integer, and it's literally just "which of the three problems are we solving today":
!> ITYPE is INTEGER!> 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βCHARACTER*1, the "do I want the eigenvectors or not" switch:
!> JOBZ is CHARACTER*1!> = 'N': Compute eigenvalues only;!> = 'V': Compute eigenvalues and eigenvectors.!>
UPLOβCHARACTER*1, tells her which triangle ofAandByou actually filled in:
!> UPLO is CHARACTER*1!> = 'U': Upper triangles of A and B are stored;!> = 'L': Lower triangles of A and B are stored.!>
Nβ integer, the order of the matricesAandB. andN >= 0, obviously, don't be weird about it π
!> N is INTEGER!> The order of the matrices A and B. N >= 0.!>
AβCOMPLEXarray, dimension(LDA, N). on entry it's your Hermitian matrixA, and she only reads the triangle you promised her viaUPLO:
!> A is COMPLEX 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!> matrix Z of eigenvectors. The eigenvectors are normalized!> as follows:!> if ITYPE = 1 or 2, Z**H*B*Z = I;!> if ITYPE = 3, Z**H*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.!>
β οΈ note the last bit β if you pick JOBZ = 'N', that triangle of A including the diagonal gets yeeted. destroyed. gone. so don't come crying if you needed it, bestie π
LDAβ integer, the leading dimension ofA, andLDA >= max(1,N):
!> LDA is INTEGER!> The leading dimension of the array A. LDA >= max(1,N).!>
BβCOMPLEXarray, dimension(LDB, N). on entry, the Hermitian positive-definiteB(again, just the triangleUPLOsays):
!> B is COMPLEX array, dimension (LDB, N)!> On entry, the Hermitian 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**H*U or B = L*L**H.!>
so B gets rewritten with her Cholesky factor once she's done with it β that's just how she rolls π
LDBβ integer, the leading dimension ofB,LDB >= max(1,N):
!> LDB is INTEGER!> The leading dimension of the array B. LDB >= max(1,N).!>
WβREALarray, dimension(N). ifINFO = 0, these are your eigenvalues, in ascending order β she sorts, you don't have to π
!> W is REAL array, dimension (N)!> If INFO = 0, the eigenvalues in ascending order.!>
WORKβCOMPLEXarray, dimension(MAX(1,LWORK)). and on the way out, ifINFO = 0,WORK(1)tells you the optimalLWORK:
!> WORK is COMPLEX array, dimension (MAX(1,LWORK))!> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.!>
LWORKβ integer, length ofWORK. minimum isLWORK >= max(1,2*N-1), but for that optimal-efficiency glow-up you wantLWORK >= (NB+1)*N, whereNBis the blocksize forCHETRDreturned byILAENV:
!> LWORK is INTEGER!> The length of the array WORK. LWORK >= max(1,2*N-1).!> For optimal efficiency, LWORK >= (NB+1)*N,!> where NB is the blocksize for CHETRD 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.!>
π and yes β LWORK = -1 is the secret "just tell me how much space you want" handshake. she computes the optimal size, drops it in WORK(1), and XERBLA stays quiet about it, fr fr.
RWORKβREALarray, dimension(max(1, 3*N-2)):
!> RWORK is REAL array, dimension (max(1, 3*N-2))!>
INFOβ integer, the receipts. read them carefully:
!> INFO is INTEGER!> = 0: successful exit!> < 0: if INFO = -i, the i-th argument had an illegal value!> > 0: CPOTRF or CHEEV returned an error code:!> <= N: if INFO = i, CHEEV failed to converge;!> i off-diagonal elements of an intermediate!> tridiagonal form did not converge to zero;!> > N: if INFO = N + i, for 1 <= i <= N, then the leading!> principal minor of order i of B is not positive.!> The factorization of B could not be completed and!> no eigenvalues or eigenvectors were computed.!>
so: 0 = slay, negative = you passed a bad argument, and > N means the leading principal minor of order i of B is not positive β the factorization couldn't finish and literally nothing got computed. that's the "you said B was positive definite and you lied" error π
π« Author π«
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Definition at line 179 of file chegv.f.
β subroutine 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)
DSYGV β same energy, but the real symmetric edition. double precision, no complex, no RWORK. she travels light π¦
πΈ Purpose πΈ
!>!> DSYGV 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.!>
same three problem flavours, except A and B are symmetric here instead of Hermitian, and B still has to be positive definite or she's not doing it π
π Parameters π
ITYPEβ integer, pick your problem:
!> ITYPE is INTEGER!> 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βCHARACTER*1:
!> JOBZ is CHARACTER*1!> = 'N': Compute eigenvalues only;!> = 'V': Compute eigenvalues and eigenvectors.!>
UPLOβCHARACTER*1:
!> UPLO is CHARACTER*1!> = 'U': Upper triangles of A and B are stored;!> = 'L': Lower triangles of A and B are stored.!>
Nβ integer, order ofAandB, andN >= 0:
!> N is INTEGER!> The order of the matrices A and B. N >= 0.!>
AβDOUBLE PRECISIONarray, dimension(LDA, N). on entry, the symmetric matrixA(just theUPLOtriangle):
!> 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!> 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.!>
β οΈ same warning as her sister: JOBZ = 'N' means that triangle of A, diagonal included, is destroyed on exit. no refunds π
LDAβ integer, leading dimension ofA,LDA >= max(1,N):
!> LDA is INTEGER!> The leading dimension of the array A. LDA >= max(1,N).!>
BβDOUBLE PRECISIONarray, dimension(LDB, N). on entry, the symmetric positive-definiteB:
!> B is DOUBLE 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.!>
note the transpose, not conjugate-transpose β she's real, that's the whole point π
LDBβ integer, leading dimension ofB,LDB >= max(1,N):
!> LDB is INTEGER!> The leading dimension of the array B. LDB >= max(1,N).!>
WβDOUBLE PRECISIONarray, dimension(N). ifINFO = 0, eigenvalues in ascending order:
!> W is DOUBLE PRECISION array, dimension (N)!> If INFO = 0, the eigenvalues in ascending order.!>
WORKβDOUBLE PRECISIONarray, dimension(MAX(1,LWORK)). on exit, ifINFO = 0,WORK(1)returns the optimalLWORK:
!> WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK))!> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.!>
LWORKβ integer. minimumLWORK >= max(1,3*N-1)(yeah, she needs more scratch space thanCHEGV), and for optimal efficiencyLWORK >= (NB+2)*N, whereNBis the blocksize forDSYTRDreturned byILAENV:
!> 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.!>
π same LWORK = -1 workspace-query trick: optimal size lands in WORK(1), and XERBLA says nothing about LWORK. iykyk π
INFOβ integer, the whole receipts section:
!> INFO is INTEGER!> = 0: successful exit!> < 0: if INFO = -i, the i-th argument had an illegal value!> > 0: DPOTRF or DSYEV returned an error code:!> <= N: if INFO = i, DSYEV failed to converge;!> i off-diagonal elements of an intermediate!> tridiagonal form did not converge to zero;!> > N: if INFO = N + i, for 1 <= i <= N, then the leading!> principal minor of order i of B is not positive.!> The factorization of B could not be completed and!> no eigenvalues or eigenvectors were computed.!>
0 = we ate. negative = bad argument, here's which one. > N = leading principal minor of order i of B isn't positive, factorization bailed, and literally zero eigenvalues/eigenvectors came out. tragic π
π«Ά Author π«Ά
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Definition at line 173 of file dsygv.f.
π
subroutine ssygv β real symmetric generalized eigenproblem, but make it fashion
subroutine ssygv (integer itype, character jobz, character uplo, integer n,
real, dimension( lda, * ) a, integer lda, real, dimension( ldb, * ) b,
integer ldb, real, dimension( * ) w, real, dimension( * ) work, integer
lwork, integer info)
SSYGV
π Purpose
okay so SSYGV computes all the eigenvalues, and optionally the eigenvectors, of a real generalized symmetric-definite eigenproblem, and it comes in three iconic forms:
A*x=(lambda)*B*x
A*Bx=(lambda)*x
B*A*x=(lambda)*x
Here A and B are assumed to be symmetric, and B is also positive definite. periodt. π
β¨ Parameters
ITYPEβITYPE is INTEGER. It 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βJOBZ is CHARACTER*1.= 'N': Compute eigenvalues only;= 'V': Compute eigenvalues and eigenvectors.
UPLOβUPLO is CHARACTER*1.= 'U': Upper triangles of A and B are stored;= 'L': Lower triangles of A and B are stored.
NβN is INTEGER. The order of the matricesAandB.N >= 0.AβA is REAL array, dimension (LDA, N).- On entry, it's the symmetric matrix
A. 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, if
JOBZ = 'V', then ifINFO = 0,Acontains the matrixZof eigenvectors. The eigenvectors are normalized as follows: ifITYPE = 1or2,Z**T*B*Z = I; ifITYPE = 3,Z**T*inv(B)*Z = I. - If
JOBZ = 'N', then on exit the upper triangle (ifUPLO='U') or the lower triangle (ifUPLO='L') ofA, including the diagonal, is destroyed. π that's the tea.
- On entry, it's the symmetric matrix
LDAβLDA is INTEGER. The leading dimension of the arrayA.LDA >= max(1,N).BβB is REAL array, dimension (LDB, N).- On entry, it's the symmetric positive definite matrix
B. 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 ofBcontaining the matrix is overwritten by the triangular factorUorLfrom the Cholesky factorizationB = U**T*UorB = L*L**T.
- On entry, it's the symmetric positive definite matrix
LDBβLDB is INTEGER. The leading dimension of the arrayB.LDB >= max(1,N).WβW is REAL array, dimension (N). IfINFO = 0, the eigenvalues in ascending order. πWORKβWORK is REAL array, dimension (MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβLWORK is INTEGER. The length of the arrayWORK.LWORK >= max(1,3*N-1). For optimal efficiency,LWORK >= (NB+2)*N, whereNBis the blocksize forSSYTRDreturned byILAENV.- If
LWORK = -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. iykyk π«Ά
- If
INFOβINFO is INTEGER.= 0: successful exit< 0: if INFO = -i, the i-th argument had an illegal value> 0: SPOTRF or SSYEV returned an error code:<= N: if INFO = i, SSYEV failed to converge; i off-diagonal elements of an intermediate tridiagonal form did not converge to zero;> N: if INFO = N + i, for 1 <= i <= N, then the leading principal minor of order i of B is not positive. 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.
Definition at line 173 of file ssygv.f.
π¦ subroutine zhegv β complex Hermitian generalized eigenproblem, serving looks
subroutine zhegv (integer itype, character jobz, character uplo, integer n,
complex*16, dimension( lda, * ) a, integer lda, complex*16, dimension(
ldb, * ) b, integer ldb, double precision, dimension( * ) w, complex*16,
dimension( * ) work, integer lwork, double precision, dimension( * )
rwork, integer info)
ZHEGV
π― Purpose
bestie, ZHEGV computes all the eigenvalues, and optionally the eigenvectors, of a complex generalized Hermitian-definite eigenproblem, in one of these three forms:
A*x=(lambda)*B*x
A*Bx=(lambda)*x
B*A*x=(lambda)*x
Here A and B are assumed to be Hermitian, and B is also positive definite. no cap. π
πΈ Parameters
ITYPEβITYPE is INTEGER. It 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βJOBZ is CHARACTER*1.= 'N': Compute eigenvalues only;= 'V': Compute eigenvalues and eigenvectors.
UPLOβUPLO is CHARACTER*1.= 'U': Upper triangles of A and B are stored;= 'L': Lower triangles of A and B are stored.
NβN is INTEGER. The order of the matricesAandB.N >= 0.AβA is COMPLEX*16 array, dimension (LDA, N).- On entry, it's the Hermitian matrix
A. 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, if
JOBZ = 'V', then ifINFO = 0,Acontains the matrixZof eigenvectors. The eigenvectors are normalized as follows: ifITYPE = 1or2,Z**H*B*Z = I; ifITYPE = 3,Z**H*inv(B)*Z = I. - If
JOBZ = 'N', then on exit the upper triangle (ifUPLO='U') or the lower triangle (ifUPLO='L') ofA, including the diagonal, is destroyed. yep, she's gone π
- On entry, it's the Hermitian matrix
LDAβLDA is INTEGER. The leading dimension of the arrayA.LDA >= max(1,N).BβB is COMPLEX*16 array, dimension (LDB, N).- On entry, it's the Hermitian positive definite matrix
B. 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 ofBcontaining the matrix is overwritten by the triangular factorUorLfrom the Cholesky factorizationB = U**H*UorB = L*L**H.
- On entry, it's the Hermitian positive definite matrix
LDBβLDB is INTEGER. The leading dimension of the arrayB.LDB >= max(1,N).WβW is DOUBLE PRECISION array, dimension (N). IfINFO = 0, the eigenvalues in ascending order.WORKβWORK is COMPLEX*16 array, dimension (MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβLWORK is INTEGER. The length of the arrayWORK.LWORK >= max(1,2*N-1). For optimal efficiency,LWORK >= (NB+1)*N, whereNBis the blocksize forZHETRDreturned byILAENV.- If
LWORK = -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. π
- If
RWORKβRWORK is DOUBLE PRECISION array, dimension (max(1, 3*N-2)).INFOβINFO is INTEGER.= 0: successful exit< 0: if INFO = -i, the i-th argument had an illegal value> 0: ZPOTRF or ZHEEV returned an error code:<= N: if INFO = i, ZHEEV failed to converge; i off-diagonal elements of an intermediate tridiagonal form did not converge to zero;> N: if INFO = N + i, for 1 <= i <= N, then the leading principal minor of order i of B is not positive. 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.
Definition at line 179 of file zhegv.f.
π«Ά Author
Generated automatically by Doxygen for LAPACK from the source code.
And that's the footer tea, bestie: source/version says LAPACK Version 3.12.0, and this page is hegv(3) β the footer line shown doesn't give a separate date, so that's all the metadata we've got. bye bestie πβ¨
π¦ 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