NAME

ztgsyl - solve the generalized Sylvester equation


SYNOPSIS

  SUBROUTINE ZTGSYL( TRANS, IJOB, M, N, A, LDA, B, LDB, C, LDC, D, 
 *      LDD, E, LDE, F, LDF, SCALE, DIF, WORK, LWORK, IWORK, INFO)
  CHARACTER * 1 TRANS
  DOUBLE COMPLEX A(LDA,*), B(LDB,*), C(LDC,*), D(LDD,*), E(LDE,*), F(LDF,*), WORK(*)
  INTEGER IJOB, M, N, LDA, LDB, LDC, LDD, LDE, LDF, LWORK, INFO
  INTEGER IWORK(*)
  DOUBLE PRECISION SCALE, DIF
  SUBROUTINE ZTGSYL_64( TRANS, IJOB, M, N, A, LDA, B, LDB, C, LDC, D, 
 *      LDD, E, LDE, F, LDF, SCALE, DIF, WORK, LWORK, IWORK, INFO)
  CHARACTER * 1 TRANS
  DOUBLE COMPLEX A(LDA,*), B(LDB,*), C(LDC,*), D(LDD,*), E(LDE,*), F(LDF,*), WORK(*)
  INTEGER*8 IJOB, M, N, LDA, LDB, LDC, LDD, LDE, LDF, LWORK, INFO
  INTEGER*8 IWORK(*)
  DOUBLE PRECISION SCALE, DIF

F95 INTERFACE

  SUBROUTINE TGSYL( TRANS, IJOB, [M], [N], A, [LDA], B, [LDB], C, [LDC], 
 *       D, [LDD], E, [LDE], F, [LDF], SCALE, DIF, [WORK], [LWORK], [IWORK], 
 *       [INFO])
  CHARACTER(LEN=1) :: TRANS
  COMPLEX(8), DIMENSION(:) :: WORK
  COMPLEX(8), DIMENSION(:,:) :: A, B, C, D, E, F
  INTEGER :: IJOB, M, N, LDA, LDB, LDC, LDD, LDE, LDF, LWORK, INFO
  INTEGER, DIMENSION(:) :: IWORK
  REAL(8) :: SCALE, DIF
  SUBROUTINE TGSYL_64( TRANS, IJOB, [M], [N], A, [LDA], B, [LDB], C, 
 *       [LDC], D, [LDD], E, [LDE], F, [LDF], SCALE, DIF, [WORK], [LWORK], 
 *       [IWORK], [INFO])
  CHARACTER(LEN=1) :: TRANS
  COMPLEX(8), DIMENSION(:) :: WORK
  COMPLEX(8), DIMENSION(:,:) :: A, B, C, D, E, F
  INTEGER(8) :: IJOB, M, N, LDA, LDB, LDC, LDD, LDE, LDF, LWORK, INFO
  INTEGER(8), DIMENSION(:) :: IWORK
  REAL(8) :: SCALE, DIF

C INTERFACE

#include <sunperf.h>

void ztgsyl(char trans, int ijob, int m, int n, doublecomplex *a, int lda, doublecomplex *b, int ldb, doublecomplex *c, int ldc, doublecomplex *d, int ldd, doublecomplex *e, int lde, doublecomplex *f, int ldf, double *scale, double *dif, int *info);

void ztgsyl_64(char trans, long ijob, long m, long n, doublecomplex *a, long lda, doublecomplex *b, long ldb, doublecomplex *c, long ldc, doublecomplex *d, long ldd, doublecomplex *e, long lde, doublecomplex *f, long ldf, double *scale, double *dif, long *info);


PURPOSE

ztgsyl solves the generalized Sylvester equation:

            A * R - L * B = scale * C            (1)
            D * R - L * E = scale * F

where R and L are unknown m-by-n matrices, (A, D), (B, E) and (C, F) are given matrix pairs of size m-by-m, n-by-n and m-by-n, respectively, with complex entries. A, B, D and E are upper triangular (i.e., (A,D) and (B,E) in generalized Schur form).

The solution (R, L) overwrites (C, F). 0 <= SCALE <= 1

is an output scaling factor chosen to avoid overflow.

In matrix notation (1) is equivalent to solve Zx = scale*b, where Z is defined as

       Z = [ kron(In, A)  -kron(B', Im) ]        (2)
           [ kron(In, D)  -kron(E', Im) ],

Here Ix is the identity matrix of size x and X' is the conjugate transpose of X. Kron(X, Y) is the Kronecker product between the matrices X and Y.

If TRANS = 'C', y in the conjugate transposed system Z'*y = scale*b is solved for, which is equivalent to solve for R and L in

            A' * R + D' * L = scale * C           (3)
            R * B' + L * E' = scale * -F

This case (TRANS = 'C') is used to compute an one-norm-based estimate of Dif[(A,D), (B,E)], the separation between the matrix pairs (A,D) and (B,E), using CLACON.

If IJOB >= 1, CTGSYL computes a Frobenius norm-based estimate of Dif[(A,D),(B,E)]. That is, the reciprocal of a lower bound on the reciprocal of the smallest singular value of Z.

This is a level-3 BLAS algorithm.


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

[2] B. Kagstrom, A Perturbation Analysis of the Generalized Sylvester Equation (AR - LB, DR - LE ) = (C, F), SIAM J. Matrix Anal. Appl., 15(4):1045-1060, 1994.

[3] B. Kagstrom and L. Westin, Generalized Schur Methods with Condition Estimators for Solving the Generalized Sylvester Equation, IEEE Transactions on Automatic Control, Vol. 34, No. 7, July 1989, pp 745-751.