TF01OD - SLICOT Library Routine Documentation

## TF01OD

### Block Hankel expansion of a multivariable parameter sequence

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

Purpose

      To construct the block Hankel expansion T of a multivariable
      parameter sequence M(1),...,M(NR+NC-1), where each parameter M(k)
      is an NH1-by-NH2 block matrix and k = 1,2,...,(NR+NC-1).

Specification

          SUBROUTINE TF01OD( NH1, NH2, NR, NC, H, LDH, T, LDT, INFO )
    C     .. Scalar Arguments ..
          INTEGER           INFO, LDH, LDT, NC, NH1, NH2, NR
    C     .. Array Arguments ..
          DOUBLE PRECISION  H(LDH,*), T(LDT,*)

Arguments

Input/Output Parameters

      NH1     (input) INTEGER
              The number of rows in each parameter M(k).  NH1 >= 0.

      NH2     (input) INTEGER
              The number of columns in each parameter M(k).  NH2 >= 0.

      NR      (input) INTEGER
              The number of parameters required in each column of the
              block Hankel expansion matrix T.  NR >= 0.

      NC      (input) INTEGER
              The number of parameters required in each row of the
              block Hankel expansion matrix T.  NC >= 0.

      H       (input) DOUBLE PRECISION array, dimension
              (LDH,(NR+NC-1)*NH2)
              The leading NH1-by-(NR+NC-1)*NH2 part of this array must
              contain the multivariable sequence M(k), where k = 1,2,
              ...,(NR+NC-1). Specifically, each parameter M(k) is an
              NH1-by-NH2 matrix whose (i,j)-th element must be stored in
              H(i,(k-1)*NH2+j) for i = 1,2,...,NH1 and j = 1,2,...,NH2.

      LDH     INTEGER
              The leading dimension of array H.  LDH >= MAX(1,NH1).

      T       (output) DOUBLE PRECISION array, dimension (LDT,NH2*NC)
              The leading NH1*NR-by-NH2*NC part of this array contains
              the block Hankel expansion of the multivariable sequence
              M(k).

      LDT     INTEGER
              The leading dimension of array T.  LDT >= MAX(1,NH1*NR).

Error Indicator

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

Method

      The NH1-by-NH2 dimensional parameters M(k) of a multivariable
      sequence are arranged into a matrix T in Hankel form such that

               | M(1)   M(2)    M(3)    . . .  M(NC)     |
               |                                         |
               | M(2)   M(3)    M(4)    . . .  M(NC+1)   |
          T =  |  .      .       .              .        |.
               |  .      .       .              .        |
               |  .      .       .              .        |
               |                                         |
               | M(NR)  M(NR+1) M(NR+2) . . .  M(NR+NC-1)|

References

      [1] Johvidov, J.S.
          Hankel and Toeplitz Matrices and Forms: Algebraic Theory,
          (translated by G.P.A. Thijsse, I. Gohberg, ed.).
          Birkhaeuser, Boston, 1982.

Numerical Aspects

      The time taken is approximately proportional to
      NH1 x NH2 x NR x NC.

Further Comments

      None

Example

Program Text

    *     TF01OD EXAMPLE PROGRAM TEXT
    *
    *     .. Parameters ..
          INTEGER          NIN, NOUT
          PARAMETER        ( NIN = 5, NOUT = 6 )
          INTEGER          NH1MAX, NH2MAX, NRMAX, NCMAX
          PARAMETER        ( NH1MAX = 20, NH2MAX = 20, NRMAX = 20,
         $                   NCMAX = 20 )
          INTEGER          LDH, LDT
          PARAMETER        ( LDH = NH1MAX, LDT = NH1MAX*NRMAX )
    *     .. Local Scalars ..
          INTEGER          I, INFO, J, NC, NCT, NH1, NH2, NR, NRT
    *     .. Local Arrays ..
          DOUBLE PRECISION H(LDH,(NRMAX+NCMAX-1)*NH2MAX),
         $                 T(LDT,NH2MAX*NCMAX)
    *     .. External Subroutines ..
          EXTERNAL         TF01OD
    *     .. Executable Statements ..
    *
          WRITE ( NOUT, FMT = 99999 )
    *     Skip the heading in the data file and read the data.
          READ ( NIN, FMT = '()' )
          READ ( NIN, FMT = * ) NH1, NH2, NR, NC
          IF ( NH1.LE.0 .OR. NH1.GE.NH1MAX ) THEN
             WRITE ( NOUT, FMT = 99995 ) NH1
          ELSE IF ( NH2.LE.0 .OR. NH2.GT.NH2MAX ) THEN
             WRITE ( NOUT, FMT = 99994 ) NH2
          ELSE IF ( NR.LE.0 .OR. NR.GT.NRMAX ) THEN
             WRITE ( NOUT, FMT = 99993 ) NR
          ELSE IF ( NC.LE.0 .OR. NC.GT.NCMAX ) THEN
             WRITE ( NOUT, FMT = 99992 ) NC
          ELSE
             READ ( NIN, FMT = * )
         $      ( ( H(I,J), I = 1,NH1 ), J = 1,( NR+NC-1 )*NH2 )
    *        Construct the NRT by NCT block Hankel expansion of M(k).
             CALL TF01OD( NH1, NH2, NR, NC, H, LDH, T, LDT, INFO )
    *
             IF ( INFO.NE.0 ) THEN
                WRITE ( NOUT, FMT = 99998 ) INFO
             ELSE
                NRT = NH1*NR
                NCT = NH2*NC
                WRITE ( NOUT, FMT = 99997 ) NRT, NCT
                DO 20 I = 1, NRT
                   WRITE ( NOUT, FMT = 99996 ) ( T(I,J), J = 1,NCT )
       20       CONTINUE
             END IF
          END IF
          STOP
    *
    99999 FORMAT (' TF01OD EXAMPLE PROGRAM RESULTS',/1X)
    99998 FORMAT (' INFO on exit from TF01OD = ',I2)
    99997 FORMAT (' The ',I2,' by ',I2,' matrix T is ')
    99996 FORMAT (20(1X,F8.4))
    99995 FORMAT (/' NH1 is out of range.',/' NH1 = ',I5)
    99994 FORMAT (/' NH2 is out of range.',/' NH2 = ',I5)
    99993 FORMAT (/' NR is out of range.',/' NR = ',I5)
    99992 FORMAT (/' NC is out of range.',/' NC = ',I5)
          END

Program Data

     TF01OD EXAMPLE PROGRAM DATA
       2     2     3     3
       1.0647 -0.4282 -0.4922 -1.2072
      -0.3043  0.6883 -0.0926  0.7167
      -0.1844 -0.8507  0.4441 -0.0478
       0.7195  0.0500 -0.3955  0.5674
       1.3387 -0.2801  0.1073 -0.5315

Program Results

     TF01OD EXAMPLE PROGRAM RESULTS

     The  6 by  6 matrix T is
       1.0647  -0.4922  -0.3043  -0.0926  -0.1844   0.4441
      -0.4282  -1.2072   0.6883   0.7167  -0.8507  -0.0478
      -0.3043  -0.0926  -0.1844   0.4441   0.7195  -0.3955
       0.6883   0.7167  -0.8507  -0.0478   0.0500   0.5674
      -0.1844   0.4441   0.7195  -0.3955   1.3387   0.1073
      -0.8507  -0.0478   0.0500   0.5674  -0.2801  -0.5315

Return to index