strexc(3F)

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

Showing IRIX 6.5.30 (default release). Unchanged since IRIX 6.5.

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
     transformation 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
     diagonal 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
             diagonal 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.