## TF01PD

### Block Toeplitz expansion of a multivariable parameter sequence

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

Purpose

```  To construct the block Toeplitz 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 TF01PD( 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 Toeplitz expansion matrix T.  NR >= 0.

NC      (input) INTEGER
The number of parameters required in each row of the
block Toeplitz 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 Toeplitz 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 Toeplitz form such that

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

```
References
```   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.

```
```  None
```
Example

Program Text

```*     TF01PD 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         TF01PD
*     .. 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 Toeplitz expansion of M(k).
CALL TF01PD( 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 (' TF01PD EXAMPLE PROGRAM RESULTS',/1X)
99998 FORMAT (' INFO on exit from TF01PD = ',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
``` TF01PD 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
``` TF01PD EXAMPLE PROGRAM RESULTS

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