tgexc#
Functions
-
void stgexc(const INT wantq, const INT wantz, const INT n, f32 *restrict A, const INT lda, f32 *restrict B, const INT ldb, f32 *restrict Q, const INT ldq, f32 *restrict Z, const INT ldz, INT *ifst, INT *ilst, f32 *restrict work, const INT lwork, INT *info)#
STGEXC reorders the generalized real Schur decomposition of a real matrix pair (A,B) using an orthogonal equivalence transformation.
so that the diagonal block of (A, B) with row index IFST is moved to row ILST.(A, B) = Q * (A, B) * Z**T,
Parameters
inwantqIf nonzero, update the left transformation matrix Q.
inwantzIf nonzero, update the right transformation matrix Z.
innThe order of the matrices A and B. n >= 0.
inoutAArray of dimension (lda, n). Generalized real Schur form.
inldaThe leading dimension of A. lda >= max(1, n).
inoutBArray of dimension (ldb, n). Upper triangular part of Schur form.
inldbThe leading dimension of B. ldb >= max(1, n).
inoutQArray of dimension (ldq, n). The orthogonal matrix Q. Not referenced if wantq = 0.
inldqThe leading dimension of Q. ldq >= 1; if wantq, ldq >= n.
inoutZArray of dimension (ldz, n). The orthogonal matrix Z. Not referenced if wantz = 0.
inldzThe leading dimension of Z. ldz >= 1; if wantz, ldz >= n.
inoutifstOn entry, index of block to move (0-based). On exit, adjusted to point to first row if it pointed to second row of 2x2 block.
inoutilstOn entry, target index (0-based). On exit, actual position of the block.
outworkArray of dimension (lwork).
inlworkThe dimension of work. lwork >= 4*n+16 for n > 1, else >= 1. If lwork = -1, workspace query.
outinfo= 0: successful exit
< 0: if info = -i, the i-th argument had an illegal value
= 1: swap failed, matrices partially reordered
void stgexc(
const INT wantq,
const INT wantz,
const INT n,
f32* restrict A,
const INT lda,
f32* restrict B,
const INT ldb,
f32* restrict Q,
const INT ldq,
f32* restrict Z,
const INT ldz,
INT* ifst,
INT* ilst,
f32* restrict work,
const INT lwork,
INT* info
);
Functions
-
void dtgexc(const INT wantq, const INT wantz, const INT n, f64 *restrict A, const INT lda, f64 *restrict B, const INT ldb, f64 *restrict Q, const INT ldq, f64 *restrict Z, const INT ldz, INT *ifst, INT *ilst, f64 *restrict work, const INT lwork, INT *info)#
DTGEXC reorders the generalized real Schur decomposition of a real matrix pair (A,B) using an orthogonal equivalence transformation.
so that the diagonal block of (A, B) with row index IFST is moved to row ILST.(A, B) = Q * (A, B) * Z**T,
Parameters
inwantqIf nonzero, update the left transformation matrix Q.
inwantzIf nonzero, update the right transformation matrix Z.
innThe order of the matrices A and B. n >= 0.
inoutAArray of dimension (lda, n). Generalized real Schur form.
inldaThe leading dimension of A. lda >= max(1, n).
inoutBArray of dimension (ldb, n). Upper triangular part of Schur form.
inldbThe leading dimension of B. ldb >= max(1, n).
inoutQArray of dimension (ldq, n). The orthogonal matrix Q. Not referenced if wantq = 0.
inldqThe leading dimension of Q. ldq >= 1; if wantq, ldq >= n.
inoutZArray of dimension (ldz, n). The orthogonal matrix Z. Not referenced if wantz = 0.
inldzThe leading dimension of Z. ldz >= 1; if wantz, ldz >= n.
inoutifstOn entry, index of block to move (0-based). On exit, adjusted to point to first row if it pointed to second row of 2x2 block.
inoutilstOn entry, target index (0-based). On exit, actual position of the block.
outworkArray of dimension (lwork).
inlworkThe dimension of work. lwork >= 4*n+16 for n > 1, else >= 1. If lwork = -1, workspace query.
outinfo= 0: successful exit
< 0: if info = -i, the i-th argument had an illegal value
= 1: swap failed, matrices partially reordered
void dtgexc(
const INT wantq,
const INT wantz,
const INT n,
f64* restrict A,
const INT lda,
f64* restrict B,
const INT ldb,
f64* restrict Q,
const INT ldq,
f64* restrict Z,
const INT ldz,
INT* ifst,
INT* ilst,
f64* restrict work,
const INT lwork,
INT* info
);
Functions
-
void ctgexc(const INT wantq, const INT wantz, const INT n, c64 *restrict A, const INT lda, c64 *restrict B, const INT ldb, c64 *restrict Q, const INT ldq, c64 *restrict Z, const INT ldz, const INT ifst, INT *ilst, INT *info)#
CTGEXC reorders the generalized Schur decomposition of a complex matrix pair (A,B), using an unitary equivalence transformation (A, B) := Q * (A, B) * Z**H, so that the diagonal block of (A, B) with row index IFST is moved to row ILST.
(A, B) must be in generalized Schur canonical form, that is, A and B are both upper triangular.
Optionally, the matrices Q and Z of generalized Schur vectors are updated.
Q(in) * A(in) * Z(in)**H = Q(out) * A(out) * Z(out)**H Q(in) * B(in) * Z(in)**H = Q(out) * B(out) * Z(out)**H
Parameters
inwantqIf nonzero, update the left transformation matrix Q.
inwantzIf nonzero, update the right transformation matrix Z.
innThe order of the matrices A and B. n >= 0.
inoutAComplex array of dimension (lda, n). Upper triangular.
inldaThe leading dimension of A. lda >= max(1, n).
inoutBComplex array of dimension (ldb, n). Upper triangular.
inldbThe leading dimension of B. ldb >= max(1, n).
inoutQComplex array of dimension (ldq, n). The unitary matrix Q. Not referenced if wantq = 0.
inldqThe leading dimension of Q. ldq >= 1; if wantq, ldq >= n.
inoutZComplex array of dimension (ldz, n). The unitary matrix Z. Not referenced if wantz = 0.
inldzThe leading dimension of Z. ldz >= 1; if wantz, ldz >= n.
inifstIndex of block to move (0-based).
inoutilstOn entry, target index (0-based). On exit, actual position.
outinfo= 0: successful exit
< 0: if info = -i, the i-th argument had an illegal value
= 1: swap failed, matrices partially reordered, ilst points to current position of block.
void ctgexc(
const INT wantq,
const INT wantz,
const INT n,
c64* restrict A,
const INT lda,
c64* restrict B,
const INT ldb,
c64* restrict Q,
const INT ldq,
c64* restrict Z,
const INT ldz,
const INT ifst,
INT* ilst,
INT* info
);
Functions
-
void ztgexc(const INT wantq, const INT wantz, const INT n, c128 *restrict A, const INT lda, c128 *restrict B, const INT ldb, c128 *restrict Q, const INT ldq, c128 *restrict Z, const INT ldz, const INT ifst, INT *ilst, INT *info)#
ZTGEXC reorders the generalized Schur decomposition of a complex matrix pair (A,B), using an unitary equivalence transformation (A, B) := Q * (A, B) * Z**H, so that the diagonal block of (A, B) with row index IFST is moved to row ILST.
(A, B) must be in generalized Schur canonical form, that is, A and B are both upper triangular.
Optionally, the matrices Q and Z of generalized Schur vectors are updated.
Q(in) * A(in) * Z(in)**H = Q(out) * A(out) * Z(out)**H Q(in) * B(in) * Z(in)**H = Q(out) * B(out) * Z(out)**H
Parameters
inwantqIf nonzero, update the left transformation matrix Q.
inwantzIf nonzero, update the right transformation matrix Z.
innThe order of the matrices A and B. n >= 0.
inoutAComplex array of dimension (lda, n). Upper triangular.
inldaThe leading dimension of A. lda >= max(1, n).
inoutBComplex array of dimension (ldb, n). Upper triangular.
inldbThe leading dimension of B. ldb >= max(1, n).
inoutQComplex array of dimension (ldq, n). The unitary matrix Q. Not referenced if wantq = 0.
inldqThe leading dimension of Q. ldq >= 1; if wantq, ldq >= n.
inoutZComplex array of dimension (ldz, n). The unitary matrix Z. Not referenced if wantz = 0.
inldzThe leading dimension of Z. ldz >= 1; if wantz, ldz >= n.
inifstIndex of block to move (0-based).
inoutilstOn entry, target index (0-based). On exit, actual position.
outinfo= 0: successful exit
< 0: if info = -i, the i-th argument had an illegal value
= 1: swap failed, matrices partially reordered, ilst points to current position of block.
void ztgexc(
const INT wantq,
const INT wantz,
const INT n,
c128* restrict A,
const INT lda,
c128* restrict B,
const INT ldb,
c128* restrict Q,
const INT ldq,
c128* restrict Z,
const INT ldz,
const INT ifst,
INT* ilst,
INT* info
);