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