SG03BW

Solving a generalized Sylvester equation, with A quasi-triangular, and E upper triangular, for an m-by-n matrix X, 1 <= n <= 2

[Specification] [Arguments] [Method] [References] [Comments] [Example]

Purpose

  To solve for X the generalized Sylvester equation

      T            T
     A  * X * C + E  * X * D  =  SCALE * Y,                      (1)

  or the transposed equation

              T            T
     A * X * C  + E * X * D   =  SCALE * Y,                      (2)

  where A and E are real M-by-M matrices, C and D are real N-by-N
  matrices, X and Y are real M-by-N matrices. N is either 1 or 2.
  The pencil A - lambda * E must be in generalized real Schur form
  (A upper quasitriangular, E upper triangular). SCALE is an output
  scale factor, set to avoid overflow in X.

Specification
      SUBROUTINE SG03BW( TRANS, M, N, A, LDA, C, LDC, E, LDE, D, LDD, X,
     $                   LDX, SCALE, INFO )
C     .. Scalar Arguments ..
      CHARACTER         TRANS
      DOUBLE PRECISION  SCALE
      INTEGER           INFO, LDA, LDC, LDD, LDE, LDX, M, N
C     .. Array Arguments ..
      DOUBLE PRECISION  A(LDA,*), C(LDC,*), D(LDD,*), E(LDE,*), X(LDX,*)

Arguments

Mode Parameters

  TRANS   CHARACTER*1
          Specifies whether the transposed equation is to be solved
          or not:
          = 'N':  Solve equation (1);
          = 'T':  Solve equation (2).

Input/Output Parameters
  M       (input) INTEGER
          The order of the matrices A and E.  M >= 0.

  N       (input) INTEGER
          The order of the matrices C and D.  N = 1 or N = 2.

  A       (input) DOUBLE PRECISION array, dimension (LDA,M)
          The leading M-by-M part of this array must contain the
          upper quasitriangular matrix A. The elements below the
          upper Hessenberg part are not referenced.

  LDA     INTEGER
          The leading dimension of the array A.  LDA >= MAX(1,M).

  C       (input) DOUBLE PRECISION array, dimension (LDC,N)
          The leading N-by-N part of this array must contain the
          matrix C.

  LDC     INTEGER
          The leading dimension of the array C.  LDC >= MAX(1,N).

  E       (input) DOUBLE PRECISION array, dimension (LDE,M)
          The leading M-by-M part of this array must contain the
          upper triangular matrix E. The elements below the main
          diagonal are not referenced.

  LDE     INTEGER
          The leading dimension of the array E.  LDE >= MAX(1,M).

  D       (input) DOUBLE PRECISION array, dimension (LDD,N)
          The leading N-by-N part of this array must contain the
          matrix D.

  LDD     INTEGER
          The leading dimension of the array D.  LDD >= MAX(1,N).

  X       (input/output) DOUBLE PRECISION array, dimension (LDX,N)
          On entry, the leading M-by-N part of this array must
          contain the right hand side matrix Y.
          On exit, the leading M-by-N part of this array contains
          the solution matrix X.

  LDX     INTEGER
          The leading dimension of the array X.  LDX >= MAX(1,M).

  SCALE   (output) DOUBLE PRECISION
          The scale factor set to avoid overflow in X.
          0 < SCALE <= 1.

Error Indicator
  INFO    INTEGER
          = 0:  successful exit;
          < 0:  if INFO = -i, the i-th argument had an illegal
                value;
          = 1:  the generalized Sylvester equation is (nearly)
                singular to working precision;  perturbed values
                were used to solve the equation (but the matrices
                A, C, D, and E are unchanged).

Method
  The method used by the routine is based on a generalization of the
  algorithm due to Bartels and Stewart [1]. See also [2] and [3] for
  details.

References
  [1] Bartels, R.H., Stewart, G.W.
      Solution of the equation A X + X B = C.
      Comm. A.C.M., 15, pp. 820-826, 1972.

  [2] Gardiner, J.D., Laub, A.J., Amato, J.J., Moler, C.B.
      Solution of the Sylvester Matrix Equation
      A X B**T + C X D**T = E.
      A.C.M. Trans. Math. Soft., vol. 18, no. 2, pp. 223-231, 1992.

  [3] Penzl, T.
      Numerical solution of generalized Lyapunov equations.
      Advances in Comp. Math., vol. 8, pp. 33-48, 1998.

Numerical Aspects
  The routine requires about 2 * N * M**2 flops. Note that we count
  a single floating point arithmetic operation as one flop.

  The algorithm is backward stable if the eigenvalues of the pencil
  A - lambda * E are real. Otherwise, linear systems of order at
  most 4 are involved into the computation. These systems are solved
  by Gauss elimination with complete pivoting. The loss of stability
  of the Gauss elimination with complete pivoting is rarely
  encountered in practice.

Further Comments
  When near singularity is detected, perturbed values are used
  to solve the equation (but the given matrices are unchanged).

Example

Program Text

  None
Program Data
  None
Program Results
  None

Return to Supporting Routines index