NAME

stgexc - reorder the generalized real Schur decomposition of a real matrix pair (A,B) using an orthogonal equivalence 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)
  INTEGER N, LDA, LDB, LDQ, LDZ, IFST, ILST, LWORK, INFO
  LOGICAL WANTQ, WANTZ
  REAL A(LDA,*), B(LDB,*), Q(LDQ,*), Z(LDZ,*), WORK(*)
  SUBROUTINE STGEXC_64( WANTQ, WANTZ, N, A, LDA, B, LDB, Q, LDQ, Z, 
 *      LDZ, IFST, ILST, WORK, LWORK, INFO)
  INTEGER*8 N, LDA, LDB, LDQ, LDZ, IFST, ILST, LWORK, INFO
  LOGICAL*8 WANTQ, WANTZ
  REAL A(LDA,*), B(LDB,*), Q(LDQ,*), Z(LDZ,*), WORK(*)

F95 INTERFACE

  SUBROUTINE TGEXC( WANTQ, WANTZ, N, A, [LDA], B, [LDB], Q, [LDQ], Z, 
 *       [LDZ], IFST, ILST, [WORK], [LWORK], [INFO])
  INTEGER :: N, LDA, LDB, LDQ, LDZ, IFST, ILST, LWORK, INFO
  LOGICAL :: WANTQ, WANTZ
  REAL, DIMENSION(:) :: WORK
  REAL, DIMENSION(:,:) :: A, B, Q, Z
  SUBROUTINE TGEXC_64( WANTQ, WANTZ, N, A, [LDA], B, [LDB], Q, [LDQ], 
 *       Z, [LDZ], IFST, ILST, [WORK], [LWORK], [INFO])
  INTEGER(8) :: N, LDA, LDB, LDQ, LDZ, IFST, ILST, LWORK, INFO
  LOGICAL(8) :: WANTQ, WANTZ
  REAL, DIMENSION(:) :: WORK
  REAL, DIMENSION(:,:) :: A, B, Q, Z

C INTERFACE

#include <sunperf.h>

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

void stgexc_64(logical wantq, logical wantz, long n, float *a, long lda, float *b, long ldb, float *q, long ldq, float *z, long ldz, long *ifst, long *ilst, long *info);


PURPOSE

stgexc reorders the generalized real Schur decomposition of a real matrix pair (A,B) using an orthogonal equivalence transformation

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 triangular.

Optionally, the matrices Q and Z of generalized Schur vectors 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


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.