SRC/strevc.f(3)

πŸ’– SRC/strevc.f πŸ’–

Okay bestie, welcome to the SRC/strevc.f page from the Library Functions Manual πŸŽ€ β€” manual name folded in right here so we can get straight to the LAPACK goodness. This one is all about STREVC, and it's lowkey iconic. ✨


🌸 NAME 🌸

SRC/strevc.f β€” that's the name, periodt. πŸ’…


πŸ¦‹ SYNOPSIS πŸ¦‹

✨ Functions/Subroutines ✨

Here's the function/subroutine lineup, exactly as the page gives it:

       subroutine strevc (side, howmny, select, n, t, ldt, vl, ldvl, vr, ldvr,
           mm, m, work, info)
           STREVC

πŸ’… Function/Subroutine Documentation πŸ’…

🫢 strevc 🫢

Full signature, character-for-character, no cap:

   subroutine strevc (character side, character howmny, logical, dimension( * )
       select, integer n, real, dimension( ldt, * ) t, integer ldt, real,
       dimension( ldvl, * ) vl, integer ldvl, real, dimension( ldvr, * ) vr,
       integer ldvr, integer mm, integer m, real, dimension( * ) work, integer
       info)
       STREVC

🧚 Purpose 🧚

Okay so STREVC computes some or all of the right and/or left eigenvectors of a real upper quasi-triangular matrix T πŸ¦‹. Matrices like this come from the Schur factorization of a real general matrix: A = Q*T*Q**T, as computed by SHSEQR.

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 y. The eigenvalues are not input to this routine β€” they're read directly from the diagonal blocks 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. If Q is the orthogonal 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 🌟

SIDE is CHARACTER*1

  • = 'R': compute right eigenvectors only;
  • = 'L': compute left eigenvectors only;
  • = 'B': compute both right and left eigenvectors.

Pick your lane, bestie πŸ’…

🌈 HOWMNY 🌈

HOWMNY is CHARACTER*1

  • = 'A': compute all right and/or left eigenvectors;
  • = 'B': compute all right and/or left eigenvectors, backtransformed by the matrices in VR and/or VL;
  • = 'S': compute selected right and/or left eigenvectors, as indicated by the logical array SELECT.

πŸŽ€ SELECT πŸŽ€

SELECT is LOGICAL array, dimension (N)

If HOWMNY = 'S', SELECT specifies the eigenvectors to be computed.

If w(j) is a real eigenvalue, the corresponding real eigenvector is computed if SELECT(j) is .TRUE..

If w(j) and w(j+1) are the real and imaginary parts of a complex eigenvalue, the corresponding complex eigenvector is computed if either SELECT(j) or SELECT(j+1) is .TRUE., and on exit SELECT(j) is set to .TRUE. and SELECT(j+1) is set to .FALSE..

Not referenced if HOWMNY = 'A' or 'B'.

πŸ¦‹ N πŸ¦‹

N is INTEGER

The order of the matrix T. N >= 0.

⭐ T ⭐

T is REAL array, dimension (LDT,N)

The upper quasi-triangular matrix T in Schur canonical form.

πŸ’œ LDT πŸ’œ

LDT is INTEGER

The leading dimension of the array T. LDT >= max(1,N).

🫢 VL 🫢

VL is REAL array, dimension (LDVL,MM)

On entry, if SIDE = 'L' or 'B' and HOWMNY = 'B', VL must contain an N-by-N matrix Q (usually the orthogonal matrix Q of Schur vectors returned by SHSEQR).

On exit, if SIDE = 'L' or 'B', VL contains:

  • if HOWMNY = 'A', the matrix Y of left eigenvectors of T;
  • if HOWMNY = 'B', the matrix Q*Y;
  • if HOWMNY = 'S', the left eigenvectors of T specified by SELECT, stored consecutively in the columns of VL, in the same order as their eigenvalues.

A complex eigenvector corresponding to a complex eigenvalue is stored in two consecutive columns, the first holding the real part, and the second the imaginary part.

Not referenced if SIDE = 'R'.

🌸 LDVL 🌸

LDVL is INTEGER

The leading dimension of the array VL. LDVL >= 1, and if SIDE = 'L' or 'B', LDVL >= N.

🧚 VR 🧚

VR is REAL array, dimension (LDVR,MM)

On entry, if SIDE = 'R' or 'B' and HOWMNY = 'B', VR must contain an N-by-N matrix Q (usually the orthogonal matrix Q of Schur vectors returned by SHSEQR).

On exit, if SIDE = 'R' or 'B', VR contains:

  • if HOWMNY = 'A', the matrix X of right eigenvectors of T;
  • if HOWMNY = 'B', the matrix Q*X;
  • if HOWMNY = 'S', the right eigenvectors of T specified by SELECT, stored consecutively in the columns of VR, in the same order as their eigenvalues.

A complex eigenvector corresponding to a complex eigenvalue is stored in two consecutive columns, the first holding the real part and the second the imaginary part.

Not referenced if SIDE = 'L'.

πŸ¦‹ LDVR πŸ¦‹

LDVR is INTEGER

The leading dimension of the array VR. LDVR >= 1, and if SIDE = 'R' or 'B', LDVR >= N.

πŸ“ MM πŸ“

MM is INTEGER

The number of columns in the arrays VL and/or VR. MM >= M.

πŸ”₯ M πŸ”₯

M is INTEGER

The number of columns in the arrays VL and/or VR actually used to store the eigenvectors.

If HOWMNY = 'A' or 'B', M is set to N.

Each selected real eigenvector occupies one column and each selected complex eigenvector occupies two columns.

🌟 WORK 🌟

WORK is REAL array, dimension (3*N)

πŸ’€ INFO πŸ’€

INFO is INTEGER

  • = 0: successful exit
  • < 0: if INFO = -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 🫢.

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 220 of file strevc.f.


πŸŽ€ Author πŸŽ€

Generated automatically by Doxygen for LAPACK from the source code.


That's the whole vibe check, bestie πŸ’–. This page is from the SRC/strevc.f(3) source in the Library Functions Manual, and the footer says LAPACK, Version 3.12.0. (The footer line doesn't hand us a separate date, so no cap β€” just version and source πŸŽ€.) Stay slay, and may your eigenvectors be normalized. πŸ’…βœ¨

πŸ“¦ where this page comes from