## MB04XY

### Applying the Householder transformations for bidiagonalization (stored in factored form) to specified one or two matrices, from the left

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

Purpose

      To apply the Householder transformations Pj stored in factored
      form into the columns of the array X, to the desired columns of
      the matrix U by premultiplication, and/or the Householder
      transformations Qj stored in factored form into the rows of the
      array X, to the desired columns of the matrix V by
      premultiplication. The Householder transformations Pj and Qj
      are stored as produced by LAPACK Library routine DGEBRD.

Specification

          SUBROUTINE MB04XY( JOBU, JOBV, M, N, X, LDX, TAUP, TAUQ, U,
         $                   LDU, V, LDV, INUL, INFO )
    C     .. Scalar Arguments ..
          CHARACTER         JOBU, JOBV
          INTEGER           INFO, LDU, LDV, LDX, M, N
    C     .. Array Arguments ..
          LOGICAL           INUL(*)
          DOUBLE PRECISION  TAUP(*), TAUQ(*), U(LDU,*), V(LDV,*),
         $                  X(LDX,*)

Arguments

Mode Parameters

      JOBU    CHARACTER*1
              Specifies whether to transform the columns in U as
              follows:
              = 'N':  Do not transform the columns in U;
              = 'A':  Transform the columns in U (U has M columns);
              = 'S':  Transform the columns in U (U has min(M,N)
                      columns).

      JOBV    CHARACTER*1
              Specifies whether to transform the columns in V as
              follows:
              = 'N':  Do not transform the columns in V;
              = 'A':  Transform the columns in V (V has N columns);
              = 'S':  Transform the columns in V (V has min(M,N)
                      columns).

Input/Output Parameters

      M       (input) INTEGER
              The number of rows of the matrix X.  M >= 0.

      N       (input) INTEGER
              The number of columns of the matrix X.  N >= 0.

      X       (input) DOUBLE PRECISION array, dimension (LDX,N)
              The leading M-by-N part contains in the columns of its
              lower triangle the Householder transformations Pj, and
              in the rows of its upper triangle the Householder
              transformations Qj in factored form.
              X is modified by the routine but restored on exit.

      LDX     INTEGER
              The leading dimension of the array X.   LDX >= MAX(1,M).

      TAUP    (input) DOUBLE PRECISION array, dimension (MIN(M,N))
              The scalar factors of the Householder transformations Pj.

      TAUQ    (input) DOUBLE PRECISION array, dimension (MIN(M,N))
              The scalar factors of the Householder transformations Qj.

      U       (input/output) DOUBLE PRECISION array, dimension (LDU,*)
              On entry, U contains the M-by-M (if JOBU = 'A') or
              M-by-min(M,N) (if JOBU = 'S') matrix U.
              On exit, the Householder transformations Pj have been
              applied to each column i of U corresponding to a parameter
              INUL(i) = .TRUE.
              NOTE that U is not referenced if JOBU = 'N'.

      LDU     INTEGER
              The leading dimension of the array U.
              LDU >= MAX(1,M), if JOBU = 'A' or JOBU = 'S';
              LDU >= 1,        if JOBU = 'N'.

      V       (input/output) DOUBLE PRECISION array, dimension (LDV,*)
              On entry, V contains the N-by-N (if JOBV = 'A') or
              N-by-min(M,N) (if JOBV = 'S') matrix V.
              On exit, the Householder transformations Qj have been
              applied to each column i of V corresponding to a parameter
              INUL(i) = .TRUE.
              NOTE that V is not referenced if JOBV = 'N'.

      LDV     INTEGER
              The leading dimension of the array V.
              LDV >= MAX(1,M), if JOBV = 'A' or JOBV = 'S';
              LDV >= 1,        if JOBV = 'N'.

      INUL    (input) LOGICAL array, dimension (MAX(M,N))
              INUL(i) = .TRUE. if the i-th column of U and/or V is to be
              transformed, and INUL(i) = .FALSE., otherwise.
              (1 <= i <= MAX(M,N)).

Error Indicator

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

Method

      The Householder transformations Pj or Qj are applied to the
      columns of U or V indexed by I for which INUL(I) = .TRUE..

Numerical Aspects

      The algorithm is backward stable.

Further Comments

      None

Example

Program Text

      None

Program Data

      None

Program Results

      None

Return to Supporting Routines index