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.
(A, B) = Q * (A, B) * Z**T,
so that the diagonal block of (A, B) with row index IFST is moved to row ILST.
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.
(A, B) = Q * (A, B) * Z**T,
so that the diagonal block of (A, B) with row index IFST is moved to row ILST.
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
);