Loading...
Searching...
No Matches

## zunbdb2()

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

ZUNBDB2

Download ZUNBDB2 + dependencies [TGZ] [ZIP] [TXT]

Purpose:

      !>
      !> ZUNBDB2 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. P must be no larger than M-P,
      !> Q, or M-Q. Routines ZUNBDB1, ZUNBDB3, and ZUNBDB4 handle cases in
      !> which P is not the minimum dimension.
      !>
      !> The unitary 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 P-by-P bidiagonal matrices represented implicitly by
      !> angles THETA, PHI.
      !>
      !>

Parameters

  [in]

  M

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

  [in]

  P

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

  [in]

  Q

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

  [in,out]

  X11

      !>          X11 is COMPLEX*16 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.
      !>

  [in]

  LDX11

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

  [in,out]

  X21

      !>          X21 is COMPLEX*16 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.
      !>

  [in]

  LDX21

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

  [out]

  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.
      !>

  [out]

  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.
      !>

  [out]

  TAUP1

      !>          TAUP1 is COMPLEX*16 array, dimension (P-1)
      !>           The scalar factors of the elementary reflectors that define
      !>           P1.
      !>

  [out]

  TAUP2

      !>          TAUP2 is COMPLEX*16 array, dimension (Q)
      !>           The scalar factors of the elementary reflectors that define
      !>           P2.
      !>

  [out]

  TAUQ1

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

  [out]

  WORK

      !>          WORK is COMPLEX*16 array, dimension (LWORK)
      !>

  [in]

  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.
      !>

  [out]

  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 ZUNCSD for details.
      !>
      !>  P1, P2, and Q1 are represented as products of elementary reflectors.
      !>  See ZUNCSD2BY1 for details on generating P1, P2, and Q1 using ZUNGQR
      !>  and ZUNGLQ.
      !>

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