trevc#

Functions

void strevc(
    const char* side,
    const char* howmny,
          INT*  select,
    const INT   n,
    const f32*  T,
    const INT   ldt,
          f32*  VL,
    const INT   ldvl,
          f32*  VR,
    const INT   ldvr,
    const INT   mm,
          INT*  m,
          f32*  work,
          INT*  info
);
void strevc(const char *side, const char *howmny, INT *select, const INT n, const f32 *T, const INT ldt, f32 *VL, const INT ldvl, f32 *VR, const INT ldvr, const INT mm, INT *m, f32 *work, INT *info)#

STREVC computes some or all of the right and/or left eigenvectors of a real upper quasi-triangular matrix T.

Matrices of this type are produced by 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, but are 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.

Parameters

in
side

‘R’: compute right eigenvectors only; ‘L’: compute left eigenvectors only; ‘B’: compute both right and left eigenvectors.

in
howmny

‘A’: compute all right and/or left eigenvectors; ‘B’: compute all, backtransformed by VR and/or VL; ‘S’: compute selected eigenvectors (as indicated by select).

inout
select

Integer array, dimension (n). If howmny = ‘S’, select specifies which eigenvectors to compute. Nonzero = selected. For complex pairs, if either is selected, both are computed.

in
n

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

in
T

Double precision array, dimension (ldt, n). The upper quasi-triangular matrix T in Schur canonical form.

in
ldt

The leading dimension of T. ldt >= max(1, n).

inout
VL

Double precision array, dimension (ldvl, mm). On entry, if howmny = ‘B’, must contain an n-by-n matrix Q. On exit, contains the left eigenvectors.

in
ldvl

The leading dimension of VL. ldvl >= 1, and if side = ‘L’ or ‘B’, ldvl >= n.

inout
VR

Double precision array, dimension (ldvr, mm). On entry, if howmny = ‘B’, must contain an n-by-n matrix Q. On exit, contains the right eigenvectors.

in
ldvr

The leading dimension of VR. ldvr >= 1, and if side = ‘R’ or ‘B’, ldvr >= n.

in
mm

The number of columns in VL and/or VR. mm >= m.

out
m

The number of columns actually used to store eigenvectors.

out
work

Double precision array, dimension (3*n).

out
info

  • = 0: successful exit

  • < 0: if info = -i, the i-th argument had an illegal value.

Functions

void dtrevc(
    const char* side,
    const char* howmny,
          INT*  select,
    const INT   n,
    const f64*  T,
    const INT   ldt,
          f64*  VL,
    const INT   ldvl,
          f64*  VR,
    const INT   ldvr,
    const INT   mm,
          INT*  m,
          f64*  work,
          INT*  info
);
void dtrevc(const char *side, const char *howmny, INT *select, const INT n, const f64 *T, const INT ldt, f64 *VL, const INT ldvl, f64 *VR, const INT ldvr, const INT mm, INT *m, f64 *work, INT *info)#

DTREVC computes some or all of the right and/or left eigenvectors of a real upper quasi-triangular matrix T.

Matrices of this type are produced by the Schur factorization of a real general matrix: A = Q*T*Q**T, as computed by DHSEQR.

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, but are 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.

Parameters

in
side

‘R’: compute right eigenvectors only; ‘L’: compute left eigenvectors only; ‘B’: compute both right and left eigenvectors.

in
howmny

‘A’: compute all right and/or left eigenvectors; ‘B’: compute all, backtransformed by VR and/or VL; ‘S’: compute selected eigenvectors (as indicated by select).

inout
select

Integer array, dimension (n). If howmny = ‘S’, select specifies which eigenvectors to compute. Nonzero = selected. For complex pairs, if either is selected, both are computed.

in
n

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

in
T

Double precision array, dimension (ldt, n). The upper quasi-triangular matrix T in Schur canonical form.

in
ldt

The leading dimension of T. ldt >= max(1, n).

inout
VL

Double precision array, dimension (ldvl, mm). On entry, if howmny = ‘B’, must contain an n-by-n matrix Q. On exit, contains the left eigenvectors.

in
ldvl

The leading dimension of VL. ldvl >= 1, and if side = ‘L’ or ‘B’, ldvl >= n.

inout
VR

Double precision array, dimension (ldvr, mm). On entry, if howmny = ‘B’, must contain an n-by-n matrix Q. On exit, contains the right eigenvectors.

in
ldvr

The leading dimension of VR. ldvr >= 1, and if side = ‘R’ or ‘B’, ldvr >= n.

in
mm

The number of columns in VL and/or VR. mm >= m.

out
m

The number of columns actually used to store eigenvectors.

out
work

Double precision array, dimension (3*n).

out
info

  • = 0: successful exit

  • < 0: if info = -i, the i-th argument had an illegal value.

Functions

void ctrevc(
    const char* side,
    const char* howmny,
          INT*  select,
    const INT   n,
          c64*  T,
    const INT   ldt,
          c64*  VL,
    const INT   ldvl,
          c64*  VR,
    const INT   ldvr,
    const INT   mm,
          INT*  m,
          c64*  work,
          f32*  rwork,
          INT*  info
);
void ctrevc(const char *side, const char *howmny, INT *select, const INT n, c64 *T, const INT ldt, c64 *VL, const INT ldvl, c64 *VR, const INT ldvr, const INT mm, INT *m, c64 *work, f32 *rwork, INT *info)#

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. The eigenvalues are not input to this routine, but are 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. 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.

Parameters

in
side

‘R’: compute right eigenvectors only; ‘L’: compute left eigenvectors only; ‘B’: compute both right and left eigenvectors.

in
howmny

‘A’: compute all right and/or left eigenvectors; ‘B’: compute all, backtransformed by VR and/or VL; ‘S’: compute selected eigenvectors (as indicated by select).

in
select

Integer array, dimension (n). If howmny = ‘S’, select specifies which eigenvectors to compute. Nonzero = selected. Not referenced if howmny = ‘A’ or ‘B’.

in
n

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

inout
T

Single complex array, dimension (ldt, n). The upper triangular matrix T. T is modified, but restored on exit.

in
ldt

The leading dimension of T. ldt >= max(1, n).

inout
VL

Single complex array, dimension (ldvl, mm). On entry, if howmny = ‘B’, must contain an n-by-n matrix Q. On exit, contains the left eigenvectors. Not referenced if side = ‘R’.

in
ldvl

The leading dimension of VL. ldvl >= 1, and if side = ‘L’ or ‘B’, ldvl >= n.

inout
VR

Single complex array, dimension (ldvr, mm). On entry, if howmny = ‘B’, must contain an n-by-n matrix Q. On exit, contains the right eigenvectors. Not referenced if side = ‘L’.

in
ldvr

The leading dimension of VR. ldvr >= 1, and if side = ‘R’ or ‘B’, ldvr >= n.

in
mm

The number of columns in VL and/or VR. mm >= m.

out
m

The number of columns actually used to store eigenvectors.

out
work

Single complex array, dimension (2*n).

out
rwork

Single precision array, dimension (n).

out
info

  • = 0: successful exit

  • < 0: if info = -i, the i-th argument had an illegal value.

Functions

void ztrevc(
    const char* side,
    const char* howmny,
          INT*  select,
    const INT   n,
          c128* T,
    const INT   ldt,
          c128* VL,
    const INT   ldvl,
          c128* VR,
    const INT   ldvr,
    const INT   mm,
          INT*  m,
          c128* work,
          f64*  rwork,
          INT*  info
);
void ztrevc(const char *side, const char *howmny, INT *select, const INT n, c128 *T, const INT ldt, c128 *VL, const INT ldvl, c128 *VR, const INT ldvr, const INT mm, INT *m, c128 *work, f64 *rwork, INT *info)#

ZTREVC 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.

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.

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.

Parameters

in
side

‘R’: compute right eigenvectors only; ‘L’: compute left eigenvectors only; ‘B’: compute both right and left eigenvectors.

in
howmny

‘A’: compute all right and/or left eigenvectors; ‘B’: compute all, backtransformed by VR and/or VL; ‘S’: compute selected eigenvectors (as indicated by select).

in
select

Integer array, dimension (n). If howmny = ‘S’, select specifies which eigenvectors to compute. Nonzero = selected. Not referenced if howmny = ‘A’ or ‘B’.

in
n

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

inout
T

Double complex array, dimension (ldt, n). The upper triangular matrix T. T is modified, but restored on exit.

in
ldt

The leading dimension of T. ldt >= max(1, n).

inout
VL

Double complex array, dimension (ldvl, mm). On entry, if howmny = ‘B’, must contain an n-by-n matrix Q. On exit, contains the left eigenvectors. Not referenced if side = ‘R’.

in
ldvl

The leading dimension of VL. ldvl >= 1, and if side = ‘L’ or ‘B’, ldvl >= n.

inout
VR

Double complex array, dimension (ldvr, mm). On entry, if howmny = ‘B’, must contain an n-by-n matrix Q. On exit, contains the right eigenvectors. Not referenced if side = ‘L’.

in
ldvr

The leading dimension of VR. ldvr >= 1, and if side = ‘R’ or ‘B’, ldvr >= n.

in
mm

The number of columns in VL and/or VR. mm >= m.

out
m

The number of columns actually used to store eigenvectors.

out
work

Double complex array, dimension (2*n).

out
rwork

Double precision array, dimension (n).

out
info

  • = 0: successful exit

  • < 0: if info = -i, the i-th argument had an illegal value.