SRC/dorbdb3.f(3)

NAME
SRC/dorbdb3.f

SYNOPSIS

  Functions/Subroutines
subroutine dorbdb3 (m, p, q, x11, ldx11, x21, ldx21, theta, phi, taup1, taup2, tauq1, work, lwork, info)
DORBDB3

Function/Subroutine Documentation

  subroutine dorbdb3 (integer m, integer p, integer q, double precision, dimension(ldx11,*) x11, integer ldx11, double precision, dimension(ldx21,*) x21, integer ldx21, double precision, dimension(*) theta, double precision, dimension(*) phi, double precision, dimension(*) taup1, double precision, dimension(*) taup2, double precision, dimension(*) tauq1, double precision, dimension(*) work, integer lwork, integer info)

DORBDB3

Purpose:

    !>
    !> DORBDB3 simultaneously bidiagonalizes the blocks of a tall and skinny
    !> matrix X with orthonormal columns:
    !>
    !>                            [ B11 ]
    !>      [ X11 ]   [ P1 |    ] [  0  ]
    !>      [-----] = [---------] [-----] Q1**T .
    !>      [ X21 ]   [    | P2 ] [ B21 ]
    !>                            [  0  ]
    !>
    !> X11 is P-by-Q, and X21 is (M-P)-by-Q. M-P must be no larger than P,
    !> Q, or M-Q. Routines DORBDB1, DORBDB2, and DORBDB4 handle cases in
    !> which M-P is not the minimum dimension.
    !>
    !> The orthogonal matrices P1, P2, and Q1 are P-by-P, (M-P)-by-(M-P),
    !> and (M-Q)-by-(M-Q), respectively. They are represented implicitly by
    !> Householder vectors.
    !>
    !> B11 and B12 are (M-P)-by-(M-P) bidiagonal matrices represented
    !> implicitly by angles THETA, PHI.
    !>
    !>

Parameters
    M

    !>          M is INTEGER
    !>           The number of rows X11 plus the number of rows in X21.
    !>

    P

    !>          P is INTEGER
    !>           The number of rows in X11. 0 <= P <= M. M-P <= min(P,Q,M-Q).
    !>

    Q

    !>          Q is INTEGER
    !>           The number of columns in X11 and X21. 0 <= Q <= M.
    !>

    X11

    !>          X11 is DOUBLE PRECISION array, dimension (LDX11,Q)
    !>           On entry, the top block of the matrix X to be reduced. On
    !>           exit, the columns of tril(X11) specify reflectors for P1 and
    !>           the rows of triu(X11,1) specify reflectors for Q1.
    !>

    LDX11

    !>          LDX11 is INTEGER
    !>           The leading dimension of X11. LDX11 >= P.
    !>

    X21

    !>          X21 is DOUBLE PRECISION array, dimension (LDX21,Q)
    !>           On entry, the bottom block of the matrix X to be reduced. On
    !>           exit, the columns of tril(X21) specify reflectors for P2.
    !>

    LDX21

    !>          LDX21 is INTEGER
    !>           The leading dimension of X21. LDX21 >= M-P.
    !>

    THETA

    !>          THETA is DOUBLE PRECISION array, dimension (Q)
    !>           The entries of the bidiagonal blocks B11, B21 are defined by
    !>           THETA and PHI. See Further Details.
    !>

    PHI

    !>          PHI is DOUBLE PRECISION array, dimension (Q-1)
    !>           The entries of the bidiagonal blocks B11, B21 are defined by
    !>           THETA and PHI. See Further Details.
    !>

    TAUP1

    !>          TAUP1 is DOUBLE PRECISION array, dimension (P)
    !>           The scalar factors of the elementary reflectors that define
    !>           P1.
    !>

    TAUP2

    !>          TAUP2 is DOUBLE PRECISION array, dimension (M-P)
    !>           The scalar factors of the elementary reflectors that define
    !>           P2.
    !>

    TAUQ1

    !>          TAUQ1 is DOUBLE PRECISION array, dimension (Q)
    !>           The scalar factors of the elementary reflectors that define
    !>           Q1.
    !>

    WORK

    !>          WORK is DOUBLE PRECISION array, dimension (LWORK)
    !>

    LWORK

    !>          LWORK is INTEGER
    !>           The dimension of the array WORK. LWORK >= M-Q.
    !>
    !>           If LWORK = -1, then a workspace query is assumed; the routine
    !>           only calculates the optimal size of the WORK array, returns
    !>           this value as the first entry of the WORK array, and no error
    !>           message related to LWORK is issued by XERBLA.
    !>

    INFO

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

Author
    Univ. of Tennessee

    Univ. of California Berkeley

    Univ. of Colorado Denver

    NAG Ltd.

Further Details:

    !>
    !>  The upper-bidiagonal blocks B11, B21 are represented implicitly by
    !>  angles THETA(1), ..., THETA(Q) and PHI(1), ..., PHI(Q-1). Every entry
    !>  in each bidiagonal band is a product of a sine or cosine of a THETA
    !>  with a sine or cosine of a PHI. See [1] or DORCSD for details.
    !>
    !>  P1, P2, and Q1 are represented as products of elementary reflectors.
    !>  See DORCSD2BY1 for details on generating P1, P2, and Q1 using DORGQR
    !>  and DORGLQ.
    !>

References:
    [1] Brian D. Sutton. Computing the complete CS decomposition. Numer. Algorithms, 50(1):33-65, 2009.

Definition at line 199 of file dorbdb3.f.

Author

Generated automatically by Doxygen for LAPACK from the source code.