SRC/ztrevc3.f(3)
πΈ NAME πΈ
okay so bestie, this is the manual page for SRC/ztrevc3.f, straight out of the LAPACK Library Functions Manual. It's the home of the ztrevc3 subroutine, and she is literally doing the most for eigenvector girlies everywhere. π
β¨ SYNOPSIS β¨
Functions/Subroutines
subroutine ztrevc3 (side, howmny, select, n, t, ldt, vl, ldvl, vr, ldvr,
mm, m, work, lwork, rwork, lrwork, info)
ZTREVC3
π§ Function/Subroutine Documentation π§
ztrevc3
subroutine ztrevc3 (character side, character howmny, logical, dimension( * ) select, integer n, complex*16, dimension( ldt, * ) t, integer ldt, complex*16, dimension( ldvl, * ) vl, integer ldvl, complex*16, dimension( ldvr, * ) vr, integer ldvr, integer mm, integer m, complex*16, dimension( * ) work, integer lwork, double precision, dimension( * ) rwork, integer lrwork, integer info)
ZTREVC3
π Purpose π
okay so ZTREVC3 computes some or all of the right and/or left eigenvectors of a complex upper triangular matrix T. Matrices of this type are produced by the Schur factorization of a complex general matrix: A = Q*T*Q**H, as computed by ZHSEQR. no cap, that's the whole setup. β¨
The right eigenvector x and the left eigenvector y of T corresponding to an eigenvalue w are defined by:
T*x = w*x, (y**H)*T = w*(y**H)
where y**H denotes the conjugate transpose of the vector y. The eigenvalues are not input to this routine, but are read directly from the diagonal of T. iconic behavior, honestly.
This routine returns the matrices X and/or Y of right and left eigenvectors of T, or the products Q*X and/or Q*Y, where Q is an input matrix. If Q is the unitary factor that reduces a matrix A to Schur form T, then Q*X and Q*Y are the matrices of right and left eigenvectors of A. π«Ά
This uses a Level 3 BLAS version of the back transformation. slay. π₯
π Parameters π
SIDEβ isCHARACTER*1.= 'R': compute right eigenvectors only;= 'L': compute left eigenvectors only;= 'B': compute both right and left eigenvectors.HOWMNYβ isCHARACTER*1.= 'A': compute all right and/or left eigenvectors;= 'B': compute all right and/or left eigenvectors, backtransformed using the matrices supplied inVRand/orVL;= 'S': compute selected right and/or left eigenvectors, as indicated by the logical arraySELECT.SELECTβ isLOGICAL array, dimension (N). IfHOWMNY = 'S',SELECTspecifies the eigenvectors to be computed. The eigenvector corresponding to the j-th eigenvalue is computed ifSELECT(j) = .TRUE.. Not referenced ifHOWMNY = 'A'or'B'.Nβ isINTEGER. The order of the matrixT.N >= 0.Tβ isCOMPLEX*16 array, dimension (LDT,N). The upper triangular matrixT.Tis modified, but restored on exit.LDTβ isINTEGER. The leading dimension of the arrayT.LDT >= max(1,N).VLβ isCOMPLEX*16 array, dimension (LDVL,MM). On entry, ifSIDE = 'L'or'B'andHOWMNY = 'B',VLmust contain anN-by-NmatrixQ(usually the unitary matrixQof Schur vectors returned byZHSEQR). On exit, ifSIDE = 'L'or'B',VLcontains: ifHOWMNY = 'A', the matrixYof left eigenvectors ofT; ifHOWMNY = 'B', the matrixQ*Y; ifHOWMNY = 'S', the left eigenvectors ofTspecified bySELECT, stored consecutively in the columns ofVL, in the same order as their eigenvalues. Not referenced ifSIDE = 'R'.LDVLβ isINTEGER. The leading dimension of the arrayVL.LDVL >= 1, and ifSIDE = 'L'or'B',LDVL >= N.VRβ isCOMPLEX*16 array, dimension (LDVR,MM). On entry, ifSIDE = 'R'or'B'andHOWMNY = 'B',VRmust contain anN-by-NmatrixQ(usually the unitary matrixQof Schur vectors returned byZHSEQR). On exit, ifSIDE = 'R'or'B',VRcontains: ifHOWMNY = 'A', the matrixXof right eigenvectors ofT; ifHOWMNY = 'B', the matrixQ*X; ifHOWMNY = 'S', the right eigenvectors ofTspecified bySELECT, stored consecutively in the columns ofVR, in the same order as their eigenvalues. Not referenced ifSIDE = 'L'.LDVRβ isINTEGER. The leading dimension of the arrayVR.LDVR >= 1, and ifSIDE = 'R'or'B',LDVR >= N.MMβ isINTEGER. The number of columns in the arraysVLand/orVR.MM >= M.Mβ isINTEGER. The number of columns in the arraysVLand/orVRactually used to store the eigenvectors. IfHOWMNY = 'A'or'B',Mis set toN. Each selected eigenvector occupies one column.WORKβ isCOMPLEX*16 array, dimension (MAX(1,LWORK)).LWORKβ isINTEGER. The dimension of arrayWORK.LWORK >= max(1,2*N). For optimum performance,LWORK >= N + 2*N*NB, whereNBis the optimal blocksize. 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.RWORKβ isDOUBLE PRECISION array, dimension (LRWORK).LRWORKβ isINTEGER. The dimension of arrayRWORK.LRWORK >= max(1,N). IfLRWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of theRWORKarray, returns this value as the first entry of theRWORKarray, and no error message related toLRWORKis issued byXERBLA.INFOβ isINTEGER.= 0: successful exit.< 0: ifINFO = -i, the i-th argument had an illegal value.
π Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π₯ Further Details π₯
The algorithm used in this program is basically backward (forward) substitution, with scaling to make the code robust against possible overflow. very demure, very mindful. π§
Each eigenvector is normalized so that the element of largest magnitude has magnitude 1; here the magnitude of a complex number (x,y) is taken to be |x| + |y|. math ate that, fr fr. π
Definition at line 242 of file ztrevc3.f.
π«Ά Author π«Ά
Generated automatically by Doxygen for LAPACK from the source code.
mwah π that's the whole page, bestie. Sign-off vibes: LAPACK Version 3.12.0, SRC/ztrevc3.f(3). periodt. ππ
π¦ 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