## TG01KD

### Orthogonal equivalence transformation of a SISO descriptor system with E upper triangular (TG01OA 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 TG01KD( 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 ..
          DOUBLE PRECISION  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) DOUBLE PRECISION 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) DOUBLE PRECISION 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) DOUBLE PRECISION 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) DOUBLE PRECISION 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) DOUBLE PRECISION 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) DOUBLE PRECISION 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