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
*     Copyright (c) 2002-2017 NICONET e.V.
*
*     .. 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