## 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

      [1] 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.

      [2] 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.

Further Comments

      None

Example

Program Text

      None

Program Data

      None

Program Results

      None

Return to Supporting Routines index