Purpose
To separate a zero singular value of a bidiagonal submatrix of
order k, k <= p, of the bidiagonal matrix
|Q(1) E(1) 0 ... 0 |
| 0 Q(2) E(2) . |
J = | . . |
| . E(p-1)|
| 0 ... ... ... Q(p) |
with p = MIN(M,N), by annihilating one or two superdiagonal
elements E(i-1) (if i > 1) and/or E(i) (if i < k).
Specification
SUBROUTINE MB02NY( UPDATU, UPDATV, M, N, I, K, Q, E, U, LDU, V,
$ LDV, DWORK )
C .. Scalar Arguments ..
LOGICAL UPDATU, UPDATV
INTEGER I, K, LDU, LDV, M, N
C .. Array Arguments ..
DOUBLE PRECISION DWORK(*), E(*), Q(*), U(LDU,*), V(LDV,*)
Arguments
Mode Parameters
UPDATU LOGICAL
Indicates whether the user wishes to accumulate in a
matrix U the left-hand Givens rotations S, as follows:
= .FALSE.: Do not form U;
= .TRUE. : The given matrix U is updated (postmultiplied)
by the left-hand Givens rotations S.
UPDATV LOGICAL
Indicates whether the user wishes to accumulate in a
matrix V the right-hand Givens rotations T, as follows:
= .FALSE.: Do not form V;
= .TRUE. : The given matrix V is updated (postmultiplied)
by the right-hand Givens rotations T.
Input/Output Parameters
M (input) INTEGER
The number of rows of the matrix U. M >= 0.
N (input) INTEGER
The number of rows of the matrix V. N >= 0.
I (input) INTEGER
The index of the negligible diagonal entry Q(I) of the
bidiagonal matrix J, I <= p.
K (input) INTEGER
The index of the last diagonal entry of the considered
bidiagonal submatrix of J, i.e., E(K-1) is considered
negligible, K <= p.
Q (input/output) DOUBLE PRECISION array, dimension (p)
where p = MIN(M,N).
On entry, Q must contain the diagonal entries of the
bidiagonal matrix J.
On exit, Q contains the diagonal entries of the
transformed bidiagonal matrix S' J T.
E (input/output) DOUBLE PRECISION array, dimension (p-1)
On entry, E must contain the superdiagonal entries of J.
On exit, E contains the superdiagonal entries of the
transformed bidiagonal matrix S' J T.
U (input/output) DOUBLE PRECISION array, dimension (LDU,p)
On entry, if UPDATU = .TRUE., U must contain the M-by-p
left transformation matrix.
On exit, if UPDATU = .TRUE., the Givens rotations S on the
left, annihilating E(i) if i < k, have been postmultiplied
into U.
U is not referenced if UPDATU = .FALSE..
LDU INTEGER
The leading dimension of the array U.
LDU >= max(1,M) if UPDATU = .TRUE.;
LDU >= 1 if UPDATU = .FALSE..
V (input/output) DOUBLE PRECISION array, dimension (LDV,p)
On entry, if UPDATV = .TRUE., V must contain the N-by-p
right transformation matrix.
On exit, if UPDATV = .TRUE., the Givens rotations T on the
right, annihilating E(i-1) if i > 1, have been
postmultiplied into V.
V is not referenced if UPDATV = .FALSE..
LDV INTEGER
The leading dimension of the array V.
LDV >= max(1,N) if UPDATV = .TRUE.;
LDV >= 1 if UPDATV = .FALSE..
Workspace
DWORK DOUBLE PRECISION array, dimension (MAX(1,LDWORK))
LDWORK >= 2*MAX(K-I,I-1), if UPDATV = UPDATU = .TRUE.;
LDWORK >= 2*(K-I), if UPDATU = .TRUE., UPDATV = .FALSE.;
LDWORK >= 2*(I-1), if UPDATV = .TRUE., UPDATU = .FALSE.;
LDWORK >= 1, if UPDATU = UPDATV = .FALSE..
Method
Let the considered bidiagonal submatrix be
|Q(1) E(1) 0 ... 0 |
| 0 Q(2) E(2) . |
| . . |
| . Q(i-1) E(i-1) . |
Jk = | . Q(i) E(i) . |.
| . Q(i+1) . . |
| . .. . |
| . E(k-1)|
| 0 ... ... Q(k) |
A zero singular value of Jk manifests itself by a zero diagonal
entry Q(i) or in practice, a negligible value of Q(i).
When a negligible diagonal element Q(i) in Jk is present, the
bidiagonal submatrix Jk is split by the routine into 2 or 3
unreduced bidiagonal submatrices by annihilating E(i) (if i < k)
using Givens rotations S on the left and by annihilating E(i-1)
(if i > 1) using Givens rotations T on the right until Jk is
reduced to the form:
|Q(1) E(1) 0 ... 0 |
| 0 . ... . |
| . ... . |
| . Q(i-1) 0 . |
S' Jk T = | . 0 0 . |.
| . Q(i+1) . . |
| . .. . |
| . E(k-1)|
| 0 ... ... Q(k) |
For more details, see [1, pp.11.12-11.14].
References
[1] Dongarra, J.J., Bunch, J.R., Moler C.B. and Stewart, G.W.
LINPACK User's Guide.
SIAM, Philadelphia, 1979.
Numerical Aspects
The algorithm is backward stable.Further Comments
NoneExample
Program Text
NoneProgram Data
NoneProgram Results
None