TG01KZ

Unitary equivalence transformation of a complex SISO descriptor system with E upper triangular (TG01OB version with more complex interface)

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

Purpose

  To compute for a single-input single-output descriptor system,
  (A, E, B, C), with E upper triangular, a transformed system,
  (Q'*A*Z, Q'*E*Z, Q'*B, C*Z), via an orthogonal equivalence
  transformation, so that Q'*B has only the first element nonzero
  and Q'*E*Z remains upper triangular.

Specification
      SUBROUTINE TG01KZ( JOBE, COMPC, COMPQ, COMPZ, N, A, LDA, E, LDE,
     $                   B, C, INCC, Q, LDQ, Z, LDZ, INFO )
C     .. Scalar Arguments ..
      CHARACTER         COMPC, COMPQ, COMPZ, JOBE
      INTEGER           INCC, INFO, LDA, LDE, LDQ, LDZ, N
C     .. Array Arguments ..
      COMPLEX*16        A(LDA,*), B(*), C(*), E(LDE,*), Q(LDQ,*),
     $                  Z(LDZ,*)

Arguments

Mode Parameters

  JOBE    CHARACTER*1
          Specifies whether E is an upper triangular or an identity
          matrix, as follows:
          = 'U':  The matrix E is an upper triangular matrix;
          = 'I':  The matrix E is assumed identity and is not given.

  COMPC   CHARACTER*1
          Indicates whether the user wishes to transform the system
          output matrix C, as follows:
          = 'C':  Transform the system output matrix C;
          = 'N':  Do not transform the system output matrix C.

  COMPQ   CHARACTER*1
          Indicates whether the user wishes to accumulate in a
          matrix Q the orthogonal row transformations, as follows:
          = 'N':  Do not form Q;
          = 'I':  Q is initialized to the unit matrix and the
                  orthogonal transformation matrix Q is returned;
          = 'U':  The given matrix Q is updated by the orthogonal
                  transformations used.

  COMPZ   CHARACTER*1
          Indicates whether the user wishes to accumulate in a
          matrix Z the orthogonal column transformations, as
          follows:
          = 'N':  Do not form Z;
          = 'I':  Z is initialized to the unit matrix and the
                  orthogonal transformation matrix Z is returned;
          = 'U':  The given matrix Z is updated by the orthogonal
                  transformations used.

Input/Output Parameters
  N       (input) INTEGER
          The dimension of the descriptor state vector; also the
          order of square matrices A and E, the number of rows of
          matrix B, and the number of columns of matrix C.  N >= 0.

  A       (input/output) COMPLEX*16 array, dimension (LDA,N)
          On entry, the leading N-by-N part of this array must
          contain the original state matrix A.
          On exit, the leading N-by-N part of this array contains
          the transformed state matrix Q'*A*Z.

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

  E       (input/output) COMPLEX*16 array, dimension (LDE,*)
          On entry, if JOBE = 'U', the leading N-by-N upper
          triangular part of this array must contain the upper
          triangular part of the descriptor matrix E. The lower
          triangular part under the first subdiagonal is not
          referenced.
          On exit, if JOBE = 'U', the leading N-by-N upper
          triangular part of this array contains the upper
          triangular part of the transformed descriptor matrix,
          Q'*E*Z.
          If JOBE = 'I', this array is not referenced.

  LDE     INTEGER
          The leading dimension of the array E.
          LDE >= MAX(1,N), if JOBE = 'U';
          LDE >= 1,        if JOBE = 'I'.

  B       (input/output) COMPLEX*16 array, dimension (N)
          On entry, the leading N part of this array must contain
          the original input matrix B.
          On exit, the leading N part of this array contains the
          transformed input matrix Q'*B with all elements but the
          first set to zero.

  C       (input/output) COMPLEX*16 array, dimension
          ((N-1)*INCC+1)
          On entry, if COMPC = 'C', the elements 1, INCC+1, ...,
          (N-1)*INCC+1 of this array must contain the original
          output vector C.
          On exit, if COMPC = 'C', the elements 1, INCC+1, ...,
          (N-1)*INCC+1 of this array contain the transformed output
          vector C*Z.
          If COMPC = 'N', this array is not referenced.

  INCC    INTEGER
          If COMPC = 'C', the increment between successive values
          of C.  INCC > 0.
          If COMPC = 'N', INCC is not used.

  Q       (input/output) COMPLEX*16 array, dimension (LDQ,*)
          On entry, if COMPQ = 'U', the leading N-by-N part of this
          array must contain the given matrix Q1. Otherwise, this
          array need not be set on input.
          On exit, if COMPU <> 'N', the leading N-by-N part of this
          array contains the orthogonal transformation matrix used
          (Q1*Q if COMPQ = 'U').
          If COMPQ = 'N', this array is not referenced.

  LDQ     INTEGER
          The leading dimension of the array Q.
          LDQ >= 1,        if COMPQ =  'N';
          LDQ >= max(1,N), if COMPQ <> 'N'.

  Z       (input/output) COMPLEX*16 array, dimension (LDZ,*)
          On entry, if COMPZ = 'U', the leading N-by-N part of this
          array must contain the given matrix Z1. Otherwise, this
          array need not be set on input.
          On exit, if COMPZ <> 'N', the leading N-by-N part of this
          array contains the orthogonal transformation matrix used
          (Z1*Z if COMPZ = 'U').
          If COMPZ = 'N', this array is not referenced.

  LDZ     INTEGER
          The leading dimension of the array Z.
          LDZ >= 1,        if COMPZ =  'N';
          LDZ >= max(1,N), if COMPZ <> 'N'.

Error Indicator
  INFO    INTEGER
          = 0:  successful exit;
          < 0:  if INFO = -i, the i-th argument had an illegal
                value.

Method
  Givens rotations are used to annihilate the last N-1 elements of B
  in reverse order, but preserve the form of E.

Numerical Aspects
  The algorithm is numerically backward stable.

Further Comments
  None
Example

Program Text

  None
Program Data
  None
Program Results
  None

Return to Supporting Routines index