Contents


NAME

     ztgexc - reorder the generalized Schur  decomposition  of  a
     complex  matrix  pair  (A,B),  using  an unitary equivalence
     transformation (A, B) := Q * (A, B) * Z', so that the diago-
     nal block of (A, B) with row index IFST is moved to row ILST

SYNOPSIS

     SUBROUTINE ZTGEXC(WANTQ, WANTZ, N, A, LDA, B, LDB, Q, LDQ, Z, LDZ,
           IFST, ILST, INFO)

     DOUBLE COMPLEX A(LDA,*), B(LDB,*), Q(LDQ,*), Z(LDZ,*)
     INTEGER N, LDA, LDB, LDQ, LDZ, IFST, ILST, INFO
     LOGICAL WANTQ, WANTZ

     SUBROUTINE ZTGEXC_64(WANTQ, WANTZ, N, A, LDA, B, LDB, Q, LDQ, Z, LDZ,
           IFST, ILST, INFO)

     DOUBLE COMPLEX A(LDA,*), B(LDB,*), Q(LDQ,*), Z(LDZ,*)
     INTEGER*8 N, LDA, LDB, LDQ, LDZ, IFST, ILST, INFO
     LOGICAL*8 WANTQ, WANTZ

  F95 INTERFACE
     SUBROUTINE TGEXC(WANTQ, WANTZ, [N], A, [LDA], B, [LDB], Q, [LDQ], Z,
            [LDZ], IFST, ILST, [INFO])

     COMPLEX(8), DIMENSION(:,:) :: A, B, Q, Z
     INTEGER :: N, LDA, LDB, LDQ, LDZ, IFST, ILST, INFO
     LOGICAL :: WANTQ, WANTZ

     SUBROUTINE TGEXC_64(WANTQ, WANTZ, [N], A, [LDA], B, [LDB], Q, [LDQ],
            Z, [LDZ], IFST, ILST, [INFO])

     COMPLEX(8), DIMENSION(:,:) :: A, B, Q, Z
     INTEGER(8) :: N, LDA, LDB, LDQ, LDZ, IFST, ILST, INFO
     LOGICAL(8) :: WANTQ, WANTZ

  C INTERFACE
     #include <sunperf.h>

     void ztgexc(int wantq, int wantz, int n,  doublecomplex  *a,
               int  lda, doublecomplex *b, int ldb, doublecomplex
               *q, int ldq, doublecomplex *z, int ldz, int *ifst,
               int *ilst, int *info);

     void ztgexc_64(long wantq, long wantz, long n, doublecomplex
               *a,  long  lda,  doublecomplex *b, long ldb, doub-
               lecomplex *q, long  ldq,  doublecomplex  *z,  long
               ldz, long *ifst, long *ilst, long *info);

PURPOSE

     ztgexc reorders the generalized  Schur  decomposition  of  a
     complex  matrix  pair  (A,B),  using  an unitary equivalence
     transformation (A, B) := Q * (A, B) * Z', so that the diago-
     nal  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  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)

     WANTZ (input)

     N (input) The order of the matrices A and B. N >= 0.

     A (input/output)
               On entry, the upper triangular  matrix  A  in  the
               pair (A, B).  On exit, the updated matrix A.

     LDA (input)
               The leading dimension  of  the  array  A.  LDA  >=
               max(1,N).

     B (input/output)
               On entry, the upper triangular  matrix  B  in  the
               pair (A, B).  On exit, the updated matrix B.

     LDB (input)
               The leading dimension  of  the  array  B.  LDB  >=
               max(1,N).

     Q (input/output)
               On entry, if WANTQ = .TRUE., the unitary matrix Q.
               On  exit,  the  updated  matrix  Q.   If  WANTQ  =
               .FALSE., Q is not referenced.

     LDQ (input)
               The leading dimension of the array Q. LDQ >= 1; If
               WANTQ = .TRUE., LDQ >= N.

     Z (input/output)
               On entry, if WANTZ = .TRUE., the unitary matrix Z.
               On  exit,  the  updated  matrix  Z.   If  WANTZ  =
               .FALSE., Z is not referenced.

     LDZ (input)
               The leading dimension of the array Z. LDZ >= 1; If
               WANTZ = .TRUE., LDZ >= N.

     IFST (input/output)
               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  adja-
               cent blocks.

     ILST (input/output)
               See the description of IFST.

     INFO (output)
               =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  Eigenvalues
     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.

     [2] B. Kagstrom and P. Poromaa; Computing  Eigenspaces  with
     Specified
         Eigenvalues of a Regular Matrix Pair (A, B)  and  Condi-
     tion
         Estimation: Theory, Algorithms and Software, Report
         UMINF - 94.04, Department  of  Computing  Science,  Umea
     University,
         S-901 87 Umea, Sweden, 1994. Also as LAPACK Working Note
     87.
         To appear in Numerical Algorithms, 1996.

     [3] B. Kagstrom and P. Poromaa, LAPACK-Style Algorithms  and
     Software
         for  Solving  the  Generalized  Sylvester  Equation  and
     Estimating the
         Separation between Regular Matrix Pairs, Report UMINF  -
     93.23,
         Department of Computing Science, Umea University,  S-901
     87 Umea,
         Sweden, December  1993,  Revised  April  1994,  Also  as
     LAPACK working
         Note 75. To appear in ACM Trans. on Math. Software,  Vol
     22, No 1,
         1996.