DTREXC(l) LAPACK routine (version 1.1) DTREXC(l)
NAME
DTREXC - 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 DTREXC( COMPQ, N, T, LDT, Q, LDQ, IFST, ILST, WORK, INFO )
CHARACTER COMPQ
INTEGER IFST, ILST, INFO, LDQ, LDT, N
DOUBLE PRECISION Q( LDQ, * ), T( LDT, * ), WORK( * )
PURPOSE
DTREXC 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 DHSEQR), 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) DOUBLE PRECISION 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) DOUBLE PRECISION 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) DOUBLE PRECISION 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