STGEXC - reorder the generalized real Schur decomposition
of a real matrix pair (A,B) using an orthogonal equiva
lence transformation (A, B) = Q * (A, B) * Z',
SYNOPSIS
SUBROUTINE STGEXC( WANTQ, WANTZ, N, A, LDA, B, LDB, Q,
LDQ, Z, LDZ, IFST, ILST, WORK, LWORK,
INFO )
LOGICAL WANTQ, WANTZ
INTEGER IFST, ILST, INFO, LDA, LDB, LDQ, LDZ,
LWORK, N
REAL A( LDA, * ), B( LDB, * ), Q( LDQ, * ),
WORK( * ), Z( LDZ, * )
PURPOSE
STGEXC reorders the generalized real Schur decomposition
of a real matrix pair (A,B) using an orthogonal equiva
lence transformation (A, B) = Q * (A, B) * Z', so that the
diagonal block of (A, B) with row index IFST is moved to
row ILST.
(A, B) must be in generalized real Schur canonical form
(as returned by SGGES), i.e. A is block upper triangular
with 1-by-1 and 2-by-2 diagonal blocks. B is upper trian
gular.
Optionally, the matrices Q and Z of generalized Schur vec
tors are updated.
Q(in) * A(in) * Z(in)' = Q(out) * A(out) * Z(out)'
Q(in) * B(in) * Z(in)' = Q(out) * B(out) * Z(out)'
ARGUMENTS
WANTQ (input) LOGICAL
WANTZ (input) LOGICAL
N (input) INTEGER
The order of the matrices A and B. N >= 0.
A (input/output) REAL array, dimension (LDA,N)
On entry, the matrix A in generalized real Schur
canonical form. On exit, the updated matrix A,
again in generalized real Schur canonical form.
LDA (input) INTEGER
The leading dimension of the array A. LDA >=
max(1,N).
On entry, the matrix B in generalized real Schur
canonical form (A,B). On exit, the updated matrix
B, again in generalized real Schur canonical form
(A,B).
LDB (input) INTEGER
The leading dimension of the array B. LDB >=
max(1,N).
Q (input/output) REAL array, dimension (LDZ,N)
On entry, if WANTQ = .TRUE., the orthogonal matrix
Q. On exit, the updated matrix Q. If WANTQ =
.FALSE., Q is not referenced.
LDQ (input) INTEGER
The leading dimension of the array Q. LDQ >= 1.
If WANTQ = .TRUE., LDQ >= N.
Z (input/output) REAL array, dimension (LDZ,N)
On entry, if WANTZ = .TRUE., the orthogonal matrix
Z. On exit, the updated matrix Z. If WANTZ =
.FALSE., Z is not referenced.
LDZ (input) INTEGER
The leading dimension of the array Z. LDZ >= 1.
If WANTZ = .TRUE., LDZ >= N.
IFST (input/output) INTEGER
ILST (input/output) INTEGER Specify the
reordering of the diagonal blocks of (A, B). The
block with row index IFST is moved to row ILST, by
a sequence of swapping between adjacent blocks.
On exit, if IFST pointed on entry to the second
row of a 2-by-2 block, it is changed to point to
the first row; ILST always points to the first row
of the block in its final position (which may dif
fer from its input value by +1 or -1). 1 <= IFST,
ILST <= N.
WORK (workspace/output) REAL array, dimension (LWORK)
On exit, if INFO = 0, WORK(1) returns the optimal
LWORK.
LWORK (input) INTEGER
The dimension of the array WORK. LWORK >= 4*N +
16.
If LWORK = -1, then a workspace query is assumed;
the routine only calculates the optimal size of
the WORK array, returns this value as the first
entry of the WORK array, and no error message
related to LWORK is issued by XERBLA.
=0: successful exit.
<0: if INFO = -i, the i-th argument had an ille
gal value.
=1: The transformed matrix pair (A, B) would be
too far from generalized Schur form; the problem
is ill- conditioned. (A, B) may have been par
tially reordered, and ILST points to the first row
of the current position of the block being moved.
FURTHER DETAILS
Based on contributions by
Bo Kagstrom and Peter Poromaa, Department of Computing
Science,
Umea University, S-901 87 Umea, Sweden.
[1] B. Kagstrom; A Direct Method for Reordering Eigenval
ues in the
Generalized Real Schur Form of a Regular Matrix Pair
(A, B), in
M.S. Moonen et al (eds), Linear Algebra for Large
Scale and
Real-Time Applications, Kluwer Academic Publ. 1993, pp
195-218.
Man(1) output converted with
man2html