STREXC(l) LAPACK routine (version 1.1) STREXC(l)
NAME
STREXC - reorder the real Schur factorization of a real matrix A =
Q*T*Q**T, so that the diagonal block of T with row index IFST is moved to
row ILST
SYNOPSIS
SUBROUTINE STREXC( COMPQ, N, T, LDT, Q, LDQ, IFST, ILST, WORK, INFO )
CHARACTER COMPQ
INTEGER IFST, ILST, INFO, LDQ, LDT, N
REAL Q( LDQ, * ), T( LDT, * ), WORK( * )
PURPOSE
STREXC reorders the real Schur factorization of a real matrix A = Q*T*Q**T,
so that the diagonal block of T with row index IFST is moved to row ILST.
The real Schur form T is reordered by an orthogonal similarity transforma-
tion Z**T*T*Z, and optionally the matrix Q of Schur vectors is updated by
postmultiplying it with Z.
T must be in Schur canonical form (as returned by SHSEQR), that is, block
upper triangular with 1-by-1 and 2-by-2 diagonal blocks; each 2-by-2 diago-
nal block has its diagonal elements equal and its off-diagonal elements of
opposite sign.
ARGUMENTS
COMPQ (input) CHARACTER*1
= 'V': update the matrix Q of Schur vectors;
= 'N': do not update Q.
N (input) INTEGER
The order of the matrix T. N >= 0.
T (input/output) REAL array, dimension (LDT,N)
On entry, the upper quasi-triangular matrix T, in Schur Schur
canonical form. On exit, the reordered upper quasi-triangular
matrix, again in Schur canonical form.
LDT (input) INTEGER
The leading dimension of the array T. LDT >= max(1,N).
Q (input/output) REAL array, dimension (LDQ,N)
On entry, if COMPQ = 'V', the matrix Q of Schur vectors. On exit,
if COMPQ = 'V', Q has been postmultiplied by the orthogonal
transformation matrix Z which reorders T. If COMPQ = 'N', Q is not
referenced.
LDQ (input) INTEGER
The leading dimension of the array Q. LDQ >= max(1,N).
IFST (input/output) INTEGER
ILST (input/output) INTEGER Specify the reordering of the diago-
nal blocks of T. The block with row index IFST is moved to row
ILST, by a sequence of transpositions 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 differ from
its input value by +1 or -1). 1 <= IFST <= N; 1 <= ILST <= N.
WORK (workspace) REAL array, dimension (N)
INFO (output) INTEGER
= 0: successful exit
< 0: if INFO = -i, the i-th argument had an illegal value
= 1: two adjacent blocks were too close to swap (the problem is
very ill-conditioned); T may have been partially reordered, and
ILST points to the first row of the current position of the block
being moved.
Back to the listing of computational routines for eigenvalue problems