trevc3#

Functions

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

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

This uses a Level 3 BLAS version of the back transformation.

Parameters

in
side

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

in
howmny

‘A’: compute all eigenvectors ‘B’: compute all eigenvectors, backtransformed ‘S’: compute selected eigenvectors

inout
select

Logical array, dimension (n). If howmny=’S’, specifies which eigenvectors to compute.

in
n

Order of matrix T. n >= 0.

in
T

Upper quasi-triangular matrix T, dimension (ldt, n).

in
ldt

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

inout
VL

Left eigenvectors, dimension (ldvl, mm).

in
ldvl

Leading dimension of VL.

inout
VR

Right eigenvectors, dimension (ldvr, mm).

in
ldvr

Leading dimension of VR.

in
mm

Number of columns in VL and/or VR.

out
m

Number of columns actually used.

out
work

Workspace, dimension (max(1, lwork)).

in
lwork

Dimension of work. lwork >= max(1, 3*n). For optimum performance, lwork >= n + 2*n*nb. If lwork = -1, workspace query.

out
info

  • = 0: successful exit

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

Functions

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

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

This uses a Level 3 BLAS version of the back transformation.

Parameters

in
side

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

in
howmny

‘A’: compute all eigenvectors ‘B’: compute all eigenvectors, backtransformed ‘S’: compute selected eigenvectors

inout
select

Logical array, dimension (n). If howmny=’S’, specifies which eigenvectors to compute.

in
n

Order of matrix T. n >= 0.

in
T

Upper quasi-triangular matrix T, dimension (ldt, n).

in
ldt

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

inout
VL

Left eigenvectors, dimension (ldvl, mm).

in
ldvl

Leading dimension of VL.

inout
VR

Right eigenvectors, dimension (ldvr, mm).

in
ldvr

Leading dimension of VR.

in
mm

Number of columns in VL and/or VR.

out
m

Number of columns actually used.

out
work

Workspace, dimension (max(1, lwork)).

in
lwork

Dimension of work. lwork >= max(1, 3*n). For optimum performance, lwork >= n + 2*n*nb. If lwork = -1, workspace query.

out
info

  • = 0: successful exit

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

Functions

void ctrevc3(
    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,
    const INT   lwork,
          f32*  rwork,
    const INT   lrwork,
          INT*  info
);
void ctrevc3(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, const INT lwork, f32 *rwork, const INT lrwork, INT *info)#

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

This uses a Level 3 BLAS version of the back transformation.

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. 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 (max(1, lwork)).

in
lwork

Dimension of work. lwork >= max(1, 2*n). For optimum performance, lwork >= n + 2*n*nb. If lwork = -1, workspace query.

out
rwork

Single precision array, dimension (max(1, lrwork)).

in
lrwork

Dimension of rwork. lrwork >= max(1, n). If lrwork = -1, workspace query.

out
info

  • = 0: successful exit

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

Functions

void ztrevc3(
    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,
    const INT   lwork,
          f64*  rwork,
    const INT   lrwork,
          INT*  info
);
void ztrevc3(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, const INT lwork, f64 *rwork, const INT lrwork, INT *info)#

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.

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.

This uses a Level 3 BLAS version of the back transformation.

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. 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 (max(1, lwork)).

in
lwork

Dimension of work. lwork >= max(1, 2*n). For optimum performance, lwork >= n + 2*n*nb. If lwork = -1, workspace query.

out
rwork

Double precision array, dimension (max(1, lrwork)).

in
lrwork

Dimension of rwork. lrwork >= max(1, n). If lrwork = -1, workspace query.

out
info

  • = 0: successful exit

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