## MB03VY

### Orthogonal matrices for reduction to periodic Hessenberg form of a product of matrices

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

Purpose

```  To generate the real orthogonal matrices Q_1, Q_2, ..., Q_p,
which are defined as the product of ihi-ilo elementary reflectors
of order n, as returned by SLICOT Library routine MB03VD:

Q_j = H_j(ilo) H_j(ilo+1) . . . H_j(ihi-1).

```
Specification
```      SUBROUTINE MB03VY( N, P, ILO, IHI, A, LDA1, LDA2, TAU, LDTAU,
\$                   DWORK, LDWORK, INFO )
C     .. Scalar Arguments ..
INTEGER           IHI, ILO, INFO, LDA1, LDA2, LDTAU, LDWORK, N, P
C     .. Array Arguments ..
DOUBLE PRECISION  A( LDA1, LDA2, * ), DWORK( * ), TAU( LDTAU, * )

```
Arguments

Input/Output Parameters

```  N       (input) INTEGER
The order of the matrices Q_1, Q_2, ..., Q_p.  N >= 0.

P       (input) INTEGER
The number p of transformation matrices.  P >= 1.

ILO     (input) INTEGER
IHI     (input) INTEGER
The values of the indices ilo and ihi, respectively, used
in the previous call of the SLICOT Library routine MB03VD.
1 <= ILO <= max(1,N); min(ILO,N) <= IHI <= N.

A       (input/output) DOUBLE PRECISION array, dimension
(LDA1,LDA2,N)
On entry, the leading N-by-N strictly lower triangular
part of A(*,*,j) must contain the vectors which define the
elementary reflectors used for reducing A_j, as returned
by SLICOT Library routine MB03VD, j = 1, ..., p.
On exit, the leading N-by-N part of A(*,*,j) contains the
N-by-N orthogonal matrix Q_j, j = 1, ..., p.

LDA1    INTEGER
The first leading dimension of the array A.
LDA1 >= max(1,N).

LDA2    INTEGER
The second leading dimension of the array A.
LDA2 >= max(1,N).

TAU     (input) DOUBLE PRECISION array, dimension (LDTAU,P)
The leading N-1 elements in the j-th column must contain
the scalar factors of the elementary reflectors used to
form the matrix Q_j, as returned by SLICOT Library routine
MB03VD.

LDTAU   INTEGER
The leading dimension of the array TAU.
LDTAU >= max(1,N-1).

```
Workspace
```  DWORK   DOUBLE PRECISION array, dimension (LDWORK)
On exit, if INFO = 0, DWORK(1) returns the optimal value
of LDWORK.

LDWORK  INTEGER
The length of the array DWORK.  LDWORK >= MAX(1,N).
For optimum performance LDWORK should be larger.

If LDWORK = -1, then a workspace query is assumed;
the routine only calculates the optimal size of the
DWORK array, returns this value as the first entry of
the DWORK array, and no error message related to LDWORK
is issued by XERBLA.

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

```
Method
```  Each matrix Q_j is generated as the product of the elementary
reflectors used for reducing A_j. Standard LAPACK routines for
Hessenberg and QR decompositions are used.

```
References
```   Bojanczyk, A.W., Golub, G. and Van Dooren, P.
The periodic Schur decomposition: algorithms and applications.
Proc. of the SPIE Conference (F.T. Luk, Ed.), 1770, pp. 31-42,
1992.

 Sreedhar, J. and Van Dooren, P.
Periodic Schur form and some matrix equations.
Proc. of the Symposium on the Mathematical Theory of Networks
and Systems (MTNS'93), Regensburg, Germany (U. Helmke,
R. Mennicken and J. Saurer, Eds.), Vol. 1, pp. 339-362, 1994.

```
Numerical Aspects
```  The algorithm is numerically stable.

```
```  None
```
Example

Program Text

```  None
```
Program Data
```  None
```
Program Results
```  None
```