MB03BC - SLICOT Library Routine Documentation

## MB03BC

### Product singular value decomposition of K-1 triangular factors of order 2

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

Purpose

      To compute the product singular value decomposition of the K-1
      triangular factors corresponding to a 2-by-2 product of K
      factors in upper Hessenberg-triangular form.
      For a general product of 2-by-2 triangular matrices

                         S(2)        S(3)            S(K)
             A = A(:,:,2)    A(:,:,3)    ... A(:,:,K),

      Givens rotations are computed so that
                                                           S(i)
        [  CV(i-1) SV(i-1) ] [ A(1,1,i)(in)  A(1,2,i)(in) ]
        [ -SV(i-1) CV(i-1) ] [     0         A(2,2,i)(in) ]
                                       S(i)
        [ A(1,1,i)(out) A(1,2,i)(out) ]    [  CV(i) SV(i) ]
      = [     0         A(2,2,i)(out) ]    [ -SV(i) CV(i) ]

      stays upper triangular and

        [  CV(1) SV(1) ]       [ CV(K) -SV(K) ]
        [ -SV(1) CV(1) ] * A * [ SV(K)  CV(K) ]

      is diagonal.

Specification

          SUBROUTINE MB03BC( K, AMAP, S, SINV, A, LDA1, LDA2, MACPAR, CV,
         $                   SV, DWORK )
    C     .. Scalar Arguments ..
          INTEGER           K, LDA1, LDA2, SINV
    C     .. Array Arguments ..
          INTEGER           AMAP(*), S(*)
          DOUBLE PRECISION  A(LDA1,LDA2,*), CV(*), DWORK(*), MACPAR(*),
         $                  SV(*)

Arguments

Input/Output Parameters

      K       (input)  INTEGER
              The number of factors.  K >= 1.

      AMAP    (input) INTEGER array, dimension (K)
              The map for accessing the factors, i.e., if AMAP(I) = J,
              then the factor A_I is stored at the J-th position in A.

      S       (input)  INTEGER array, dimension (K)
              The signature array. Each entry of S must be 1 or -1.

      SINV    (input) INTEGER
              Signature multiplier. Entries of S are virtually
              multiplied by SINV.

      A       (input/output)  DOUBLE PRECISION array, dimension
                              (LDA1,LDA2,K)
              On entry, the leading 2-by-2-by-K part of this array must
              contain a 2-by-2 product (implicitly represented by its K
              factors) in upper Hessenberg-triangular form.
              On exit, the leading 2-by-2-by-K part of this array
              contains modified triangular factors such that their
              product is diagonal.

      LDA1    INTEGER
              The first leading dimension of the array A.  LDA1 >= 2.

      LDA2    INTEGER
              The second leading dimension of the array A.  LDA2 >= 2.

      MACPAR  (input)  DOUBLE PRECISION array, dimension (5)
              Machine parameters:
              MACPAR(1)  overflow threshold,         DLAMCH( 'O' );
              MACPAR(2)  underflow threshold,        DLAMCH( 'U' );
              MACPAR(3)  safe minimum,               DLAMCH( 'S' );
              MACPAR(4)  relative machine precision, DLAMCH( 'E' );
              MACPAR(5)  base of the machine,        DLAMCH( 'B' ).

      CV      (output)  DOUBLE PRECISION array, dimension (K)
              On exit, the first K elements of this array contain the
              cosines of the Givens rotations.

      SV      (output)  DOUBLE PRECISION array, dimension (K)
              On exit, the first K elements of this array contain the
              sines of the Givens rotations.

Workspace

      DWORK   DOUBLE PRECISION array, dimension (3*(K-1))

Method

      The product singular value decomposition of the K-1
      triangular factors are computed as described in [1].

References

      [1] Bojanczyk, A. and Van Dooren, P.
          On propagating orthogonal transformations in a product of 2x2
          triangular matrices.
          In Reichel, Ruttan and Varga: 'Numerical Linear Algebra',
          pp. 1-9, 1993.

Further Comments

      None

Example

Program Text

      None

Program Data

      None

Program Results

      None

Return to Supporting Routines index