SRC/DEPRECATED/zgegv.f(3)
π NAME π
SRC/DEPRECATED/zgegv.f β okay bestie, this is the LAPACK Library Functions Manual page for zgegv, and yes, it lives in the deprecated folder for a reason. π
β¨ SYNOPSIS β¨
π Functions/Subroutines π
subroutine zgegv (jobvl, jobvr, n, a, lda, b, ldb, alpha, beta, vl, ldvl, vr, ldvr, work, lwork, rwork, info)
ZGEGV computes the eigenvalues and, optionally, the left and/or right eigenvectors of a complex matrix pair (A,B).
π§ Function/Subroutine Documentation π§
subroutine zgegv (character jobvl, character jobvr, integer n, complex*16,
dimension( lda, * ) a, integer lda, complex*16, dimension( ldb, * ) b,
integer ldb, complex*16, dimension( * ) alpha, complex*16, dimension( *
) beta, complex*16, dimension( ldvl, * ) vl, integer ldvl, complex*16,
dimension( ldvr, * ) vr, integer ldvr, complex*16, dimension( * ) work,
integer lwork, double precision, dimension( * ) rwork, integer info)
ZGEGV computes the eigenvalues and, optionally, the left and/or right eigenvectors of a complex matrix pair (A,B). Iconic behavior, honestly.
π― Purpose π―
π¨ Deprecated alert: This routine is deprecated and has been replaced by routine ZGGEV.
ZGEGV computes the eigenvalues and, optionally, the left and/or right eigenvectors of a complex matrix pair (A,B). Given two square matrices A and B, the generalized nonsymmetric eigenvalue problem (GNEP) is to find the eigenvalues lambda and corresponding (non-zero) eigenvectors x such that
A*x = lambda*B*x.
An alternate form is to find the eigenvalues mu and corresponding eigenvectors y such that
mu*A*y = B*y.
These two forms are equivalent with mu = 1/lambda and x = y if neither lambda nor mu is zero. In order to deal with the case that lambda or mu is zero or small, two values alpha and beta are returned for each eigenvalue, such that lambda = alpha/beta and mu = beta/alpha.
The vectors x and y in the above equations are right eigenvectors of the matrix pair (A,B). Vectors u and v satisfying
u**H*A = lambda*u**H*B or mu*v**H*A = v**H*B
are left eigenvectors of (A,B).
The source literally has this note, blank spot and all: Note: this routine performs on A and B β yes bestie, I am not filling in that blank for you. π
π Parameters π
JOBVLβJOBVL is CHARACTER*1= 'N':do not compute the left generalized eigenvectors;= 'V':compute the left generalized eigenvectors (returned inVL).
JOBVRβJOBVR is CHARACTER*1= 'N':do not compute the right generalized eigenvectors;= 'V':compute the right generalized eigenvectors (returned inVR).
NβN is INTEGER; the order of the matricesA,B,VL, andVR.N >= 0.AβA is COMPLEX*16 array, dimension (LDA, N). On entry, the matrixA. IfJOBVL = 'V'orJOBVR = 'V', then on exitAcontains the Schur form ofAfrom the generalized Schur factorization of the pair(A,B)after balancing. If no eigenvectors were computed, then only the diagonal elements of the Schur form will be correct. SeeZGGHRDandZHGEQZfor details.LDAβLDA is INTEGER; the leading dimension ofA.LDA >= max(1,N).BβB is COMPLEX*16 array, dimension (LDB, N). On entry, the matrixB. IfJOBVL = 'V'orJOBVR = 'V', then on exitBcontains the upper triangular matrix obtained fromBin the generalized Schur factorization of the pair(A,B)after balancing. If no eigenvectors were computed, then only the diagonal elements ofBwill be correct. SeeZGGHRDandZHGEQZfor details.LDBβLDB is INTEGER; the leading dimension ofB.LDB >= max(1,N).ALPHAβALPHA is COMPLEX*16 array, dimension (N). The complex scalarsalphathat define the eigenvalues of GNEP.BETAβBETA is COMPLEX*16 array, dimension (N). The complex scalarsbetathat define the eigenvalues of GNEP.- Together, the quantities
alpha = ALPHA(j)andbeta = BETA(j)represent the j-th eigenvalue of the matrix pair(A,B), in one of the formslambda = alpha/betaormu = beta/alpha. - Since either
lambdaormumay overflow, they should not, in general, be computed.
- Together, the quantities
VLβVL is COMPLEX*16 array, dimension (LDVL,N). IfJOBVL = 'V', the left eigenvectorsu(j)are stored in the columns ofVL, in the same order as their eigenvalues.- Each eigenvector is scaled so that its largest component has
abs(real part) + abs(imag. part) = 1, except for eigenvectors corresponding to an eigenvalue withalpha = beta = 0, which are set to zero. - Not referenced if
JOBVL = 'N'.
- Each eigenvector is scaled so that its largest component has
LDVLβLDVL is INTEGER; the leading dimension of the matrixVL.LDVL >= 1, and ifJOBVL = 'V',LDVL >= N.VRβVR is COMPLEX*16 array, dimension (LDVR,N). IfJOBVR = 'V', the right eigenvectorsx(j)are stored in the columns ofVR, in the same order as their eigenvalues.- Each eigenvector is scaled so that its largest component has
abs(real part) + abs(imag. part) = 1, except for eigenvectors corresponding to an eigenvalue withalpha = beta = 0, which are set to zero. - Not referenced if
JOBVR = 'N'.
- Each eigenvector is scaled so that its largest component has
LDVRβLDVR is INTEGER; the leading dimension of the matrixVR.LDVR >= 1, and ifJOBVR = 'V',LDVR >= N.WORKβWORK is COMPLEX*16 array, dimension (MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβLWORK is INTEGER; the dimension of the arrayWORK.LWORK >= max(1,2*N).- For good performance,
LWORKmust generally be larger. - To compute the optimal value of
LWORK, callILAENVto get blocksizes (forZGEQRF,ZUNMQR, andZUNGQR.) Then compute:NB-- MAX of the blocksizes forZGEQRF,ZUNMQR, andZUNGQR;- The optimal
LWORKisMAX( 2*N, N*(NB+1) ).
- 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.
- For good performance,
RWORKβRWORK is DOUBLE PRECISION array, dimension (8*N).INFOβINFO is INTEGER= 0:successful exit< 0:ifINFO = -i, the i-th argument had an illegal value.=1,...,N:The QZ iteration failed. No eigenvectors have been calculated, butALPHA(j)andBETA(j)should be correct forj=INFO+1,...,N.> N:errors that usually indicate LAPACK problems:=N+1:error return fromZGGBAL=N+2:error return fromZGEQRF=N+3:error return fromZUNMQR=N+4:error return fromZUNGQR=N+5:error return fromZGGHRD=N+6:error return fromZHGEQZ(other than failed iteration)=N+7:error return fromZTGEVC=N+8:error return fromZGGBAK(computingVL)=N+9:error return fromZGGBAK(computingVR)=N+10:error return fromZLASCL(various calls)
π Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π Further Details π
βοΈ Balancing βοΈ
This driver calls ZGGBAL to both permute and scale rows and columns of A and B. The permutations PL and PR are chosen so that PL*A*PR and PL*B*R will be upper triangular except for the diagonal blocks A(i:j,i:j) and B(i:j,i:j), with i and j as close together as possible. The diagonal scaling matrices DL and DR are chosen so that the pair DL*PL*A*PR*DR, DL*PL*B*PR*DR have elements close to one (except for the elements that start out zero.)
After the eigenvalues and eigenvectors of the balanced matrices have been computed, ZGGBAK transforms the eigenvectors back to what they would have been (in perfect arithmetic) if they had not been balanced.
π¦ Contents of A and B on Exit π¦
If any eigenvectors are computed (either JOBVL='V' or JOBVR='V' or both), then on exit the arrays A and B will contain the complex Schur form[*] of the versions of A and B. If no eigenvectors are computed, then only the diagonal blocks will be correct.
[*] In other words, upper triangular form.
Definition at line 280 of file zgegv.f.
π€ Author π€
Generated automatically by Doxygen for LAPACK from the source code.
π cute sign-off: this page is from LAPACK Version 3.12.0, page SRC/DEPRECATED/zgegv.f(3) β go forth and maybe use ZGGEV instead, 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