SRC/ctrevc.f(3)
π SRC/ctrevc.f
okay so bestie, this is the manual page for SRC/ctrevc.f, and it's literally the Fortran home of the CTREVC subroutine π like, the whole page is basically one iconic little function and its whole personality. Come learn her with me π
β¨ SYNOPSIS β¨
Functions/Subroutines
subroutine ctrevc (side, howmny, select, n, t, ldt, vl, ldvl, vr, ldvr,
mm, m, work, rwork, info)
That's CTREVC π no cap, that's the whole vibe.
πΈ Function/Subroutine Documentation πΈ
CTREVC
subroutine ctrevc (character side, character howmny, logical, dimension( * )
select, integer n, complex, dimension( ldt, * ) t, integer ldt, complex,
dimension( ldvl, * ) vl, integer ldvl, complex, dimension( ldvr, * ) vr,
integer ldvr, integer mm, integer m, complex, dimension( * ) work, real,
dimension( * ) rwork, integer info)
π Purpose
Okay so, what does she even do? CTREVC 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 CHSEQR π¦.
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 π. And here's the cute part β the eigenvalues are not input to this routine, they're read directly from the diagonal of T π.
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 π«. So 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. slay.
π Parameters
SIDEβSIDEisCHARACTER*1.= 'R':compute right eigenvectors only;= 'L':compute left eigenvectors only;= 'B':compute both right and left eigenvectors.
HOWMNYβHOWMNYisCHARACTER*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βSELECTisLOGICALarray, 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βNisINTEGER. The order of the matrixT.N >= 0β.TβTisCOMPLEXarray, dimension(LDT,N). The upper triangular matrixT. Heads up bestie:Tis modified, but restored on exit π₯ (she leaves it exactly how she found it, iconic).LDTβLDTisINTEGER. The leading dimension of the arrayT.LDT >= max(1,N).VLβVLisCOMPLEXarray, dimension(LDVL,MM). On entry, ifSIDE = 'L'or'B'andHOWMNY = 'B',VLmust contain an N-by-N matrixQ(usually the unitary matrixQof Schur vectors returned byCHSEQR) πΈ. On exit, ifSIDE = 'L'or'B',VLcontains:- if
HOWMNY = 'A', the matrixYof left eigenvectors ofT; - if
HOWMNY = 'B', the matrixQ*Y; - if
HOWMNY = 'S', the left eigenvectors ofTspecified bySELECT, stored consecutively in the columns ofVL, in the same order as their eigenvalues. Not referenced ifSIDE = 'R'π.
- if
LDVLβLDVLisINTEGER. The leading dimension of the arrayVL.LDVL >= 1, and ifSIDE = 'L'or'B',LDVL >= N.VRβVRisCOMPLEXarray, dimension(LDVR,MM). On entry, ifSIDE = 'R'or'B'andHOWMNY = 'B',VRmust contain an N-by-N matrixQ(usually the unitary matrixQof Schur vectors returned byCHSEQR) π. On exit, ifSIDE = 'R'or'B',VRcontains:- if
HOWMNY = 'A', the matrixXof right eigenvectors ofT; - if
HOWMNY = 'B', the matrixQ*X; - if
HOWMNY = 'S', the right eigenvectors ofTspecified bySELECT, stored consecutively in the columns ofVR, in the same order as their eigenvalues. Not referenced ifSIDE = 'L'π.
- if
LDVRβLDVRisINTEGER. The leading dimension of the arrayVR.LDVR >= 1, and ifSIDE = 'R'or'B';LDVR >= N.MMβMMisINTEGER. The number of columns in the arraysVLand/orVR.MM >= M.MβMisINTEGER. 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βWORKisCOMPLEXarray, dimension(2*N).RWORKβRWORKisREALarray, dimension(N).INFOβINFOisINTEGER.= 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.
the whole squad, fr fr π«Ά
π₯ Further Details
The algorithm used in this program is basically backward (forward) substitution, with scaling to make the the code robust against possible overflow π (yes, "the the" β that's verbatim, I don't make the rules, I just report them).
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|.
Definition at line 216 of file ctrevc.f.
π Author (the meta one)
Generated automatically by Doxygen for LAPACK from the source code. not a human, just a very diligent little robot π
and that's the whole page bestie!! πΈ this beauty ships with LAPACK, Version 3.12.0 π go forth and compute those eigenvectors, you absolute main character πβ¨
π¦ 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