(S|D|C|Z)TREVC

Single, double, single complex, and double complex TREVC.

Description

Computes the left/right eigenvectors of an upper (quasi) triangular matrix T.

Upper (quasi) triangular matrices are produced during Schur factorization, for example by HSEQR.

Right eigenvectors x satisfy:

T \mult x = \lambda x

Left eigenvectors y satisfy:

\herm{y} \mult T = \lambda \herm{y}

Eigenvalues \lambda are not passed explicitly, they are taken from the diagonal of T. Optionally a matrix Q can be given that reduces an original matrix A to upper triangular form, which allows the calculation of the eigenvectors of A (set HOWMNY to B).

The real versions of this function accept quasi triangular form which allows 1x1 and 2x2 blocks along the diagonal of T corresponding to real and pairs of complex conjugate eigenvalues.

LAPACK Interface

void strevc(const char *SIDE, const char *HOWMNY, qml_int *SELECT,
    const qml_long *N, float *T, const qml_long *LDT, float *VL,
    const qml_long *LDVL, float *VR, const qml_long *LDVR,
    const qml_long *MM, qml_long *M, float *WORK, qml_long *INFO);

void dtrevc(const char *SIDE, const char *HOWMNY, qml_int *SELECT,
    const qml_long *N, double *T, const qml_long *LDT, double *VL,
    const qml_long *LDVL, double *VR, const qml_long *LDVR,
    const qml_long *MM, qml_long *M, double *WORK, qml_long *INFO);

void ctrevc(const char *SIDE, const char *HOWMNY, qml_int *SELECT,
    const qml_long *N, qml_single_complex *T, const qml_long *LDT,
    qml_single_complex *VL, const qml_long *LDVL, qml_single_complex *VR,
    const qml_long *LDVR, const qml_long *MM, qml_long *M,
    qml_single_complex *WORK, float *RWORK, qml_long *INFO);

void ztrevc(const char *SIDE, const char *HOWMNY, qml_int *SELECT,
    const qml_long *N, qml_double_complex *T, const qml_long *LDT,
    qml_double_complex *VL, const qml_long *LDVL, qml_double_complex *VR,
    const qml_long *LDVR, const qml_long *MM, qml_long *M,
    qml_double_complex *WORK, double *RWORK, qml_long *INFO);

Arguments

SIDE Compute right ‘R’, left ‘L’, or both ‘B’ eigenvectors
HOWMNY Compute all eigenvectors ‘A’, backtransformed eigenvectors ‘B’, or selected eigenvectors ‘S’
SELECT Boolean array choosing eigenvectors used when HOWMNY is ‘S’
N Number of rows and columns of T
T Upper (quasi) triangular matrix, modified but restored on exit
LDT Leading dimension of T
VL Matrix of size N x N containing Q, overwritten with left eigenvectors
LDVL Leading dimension of VL
VR Matrix of size N x N containing Q, overwritten with right eigenvectors
LDVR Leading dimension of VR
MM Number of columns in VL and VR
M On exit set to number of columns in VL and VR used to store eigenvectors
WORK Work space of size 3N
RWORK Work space of size N
INFO 0 on success