1ZBDSQR(1) LAPACK routine (version 3.1) ZBDSQR(1)
2
3
4
6 ZBDSQR - the singular values and, optionally, the right and/or left
7 singular vectors from the singular value decomposition (SVD) of a real
8 N-by-N (upper or lower) bidiagonal matrix B using the implicit zero-
9 shift QR algorithm
10
12 SUBROUTINE ZBDSQR( UPLO, N, NCVT, NRU, NCC, D, E, VT, LDVT, U, LDU, C,
13 LDC, RWORK, INFO )
14
15 CHARACTER UPLO
16
17 INTEGER INFO, LDC, LDU, LDVT, N, NCC, NCVT, NRU
18
19 DOUBLE PRECISION D( * ), E( * ), RWORK( * )
20
21 COMPLEX*16 C( LDC, * ), U( LDU, * ), VT( LDVT, * )
22
24 ZBDSQR computes the singular values and, optionally, the right and/or
25 left singular vectors from the singular value decomposition (SVD) of a
26 real N-by-N (upper or lower) bidiagonal matrix B using the implicit
27 zero-shift QR algorithm. The SVD of B has the form
28
29 B = Q * S * P**H
30
31 where S is the diagonal matrix of singular values, Q is an orthogonal
32 matrix of left singular vectors, and P is an orthogonal matrix of right
33 singular vectors. If left singular vectors are requested, this subrou‐
34 tine actually returns U*Q instead of Q, and, if right singular vectors
35 are requested, this subroutine returns P**H*VT instead of P**H, for
36 given complex input matrices U and VT. When U and VT are the unitary
37 matrices that reduce a general matrix A to bidiagonal form: A = U*B*VT,
38 as computed by ZGEBRD, then
39
40 A = (U*Q) * S * (P**H*VT)
41
42 is the SVD of A. Optionally, the subroutine may also compute Q**H*C
43 for a given complex input matrix C.
44
45 See "Computing Small Singular Values of Bidiagonal Matrices With Guar‐
46 anteed High Relative Accuracy," by J. Demmel and W. Kahan, LAPACK Work‐
47 ing Note #3 (or SIAM J. Sci. Statist. Comput. vol. 11, no. 5, pp.
48 873-912, Sept 1990) and
49 "Accurate singular values and differential qd algorithms," by B. Par‐
50 lett and V. Fernando, Technical Report CPAM-554, Mathematics Depart‐
51 ment, University of California at Berkeley, July 1992 for a detailed
52 description of the algorithm.
53
54
56 UPLO (input) CHARACTER*1
57 = 'U': B is upper bidiagonal;
58 = 'L': B is lower bidiagonal.
59
60 N (input) INTEGER
61 The order of the matrix B. N >= 0.
62
63 NCVT (input) INTEGER
64 The number of columns of the matrix VT. NCVT >= 0.
65
66 NRU (input) INTEGER
67 The number of rows of the matrix U. NRU >= 0.
68
69 NCC (input) INTEGER
70 The number of columns of the matrix C. NCC >= 0.
71
72 D (input/output) DOUBLE PRECISION array, dimension (N)
73 On entry, the n diagonal elements of the bidiagonal matrix B.
74 On exit, if INFO=0, the singular values of B in decreasing
75 order.
76
77 E (input/output) DOUBLE PRECISION array, dimension (N-1)
78 On entry, the N-1 offdiagonal elements of the bidiagonal matrix
79 B. On exit, if INFO = 0, E is destroyed; if INFO > 0, D and E
80 will contain the diagonal and superdiagonal elements of a bidi‐
81 agonal matrix orthogonally equivalent to the one given as
82 input.
83
84 VT (input/output) COMPLEX*16 array, dimension (LDVT, NCVT)
85 On entry, an N-by-NCVT matrix VT. On exit, VT is overwritten
86 by P**H * VT. Not referenced if NCVT = 0.
87
88 LDVT (input) INTEGER
89 The leading dimension of the array VT. LDVT >= max(1,N) if
90 NCVT > 0; LDVT >= 1 if NCVT = 0.
91
92 U (input/output) COMPLEX*16 array, dimension (LDU, N)
93 On entry, an NRU-by-N matrix U. On exit, U is overwritten by U
94 * Q. Not referenced if NRU = 0.
95
96 LDU (input) INTEGER
97 The leading dimension of the array U. LDU >= max(1,NRU).
98
99 C (input/output) COMPLEX*16 array, dimension (LDC, NCC)
100 On entry, an N-by-NCC matrix C. On exit, C is overwritten by
101 Q**H * C. Not referenced if NCC = 0.
102
103 LDC (input) INTEGER
104 The leading dimension of the array C. LDC >= max(1,N) if NCC >
105 0; LDC >=1 if NCC = 0.
106
107 RWORK (workspace) DOUBLE PRECISION array, dimension (2*N)
108 if NCVT = NRU = NCC = 0, (max(1, 4*N-4)) otherwise
109
110 INFO (output) INTEGER
111 = 0: successful exit
112 < 0: If INFO = -i, the i-th argument had an illegal value
113 > 0: the algorithm did not converge; D and E contain the ele‐
114 ments of a bidiagonal matrix which is orthogonally similar to
115 the input matrix B; if INFO = i, i elements of E have not con‐
116 verged to zero.
117
119 TOLMUL DOUBLE PRECISION, default = max(10,min(100,EPS**(-1/8)))
120 TOLMUL controls the convergence criterion of the QR loop. If
121 it is positive, TOLMUL*EPS is the desired relative precision in
122 the computed singular values. If it is negative, abs(TOL‐
123 MUL*EPS*sigma_max) is the desired absolute accuracy in the com‐
124 puted singular values (corresponds to relative accuracy
125 abs(TOLMUL*EPS) in the largest singular value. abs(TOLMUL)
126 should be between 1 and 1/EPS, and preferably between 10 (for
127 fast convergence) and .1/EPS (for there to be some accuracy in
128 the results). Default is to lose at either one eighth or 2 of
129 the available decimal digits in each computed singular value
130 (whichever is smaller).
131
132 MAXITR INTEGER, default = 6
133 MAXITR controls the maximum number of passes of the algorithm
134 through its inner loop. The algorithms stops (and so fails to
135 converge) if the number of passes through the inner loop
136 exceeds MAXITR*N**2.
137
138
139
140 LAPACK routine (version 3.1) November 2006 ZBDSQR(1)