1DLASDA(1) LAPACK auxiliary routine (version 3.1) DLASDA(1)
2
3
4
6 DLASDA - divide and conquer approach, DLASDA computes the singular
7 value decomposition (SVD) of a real upper bidiagonal N-by-M matrix B
8 with diagonal D and offdiagonal E, where M = N + SQRE
9
11 SUBROUTINE DLASDA( ICOMPQ, SMLSIZ, N, SQRE, D, E, U, LDU, VT, K, DIFL,
12 DIFR, Z, POLES, GIVPTR, GIVCOL, LDGCOL, PERM,
13 GIVNUM, C, S, WORK, IWORK, INFO )
14
15 INTEGER ICOMPQ, INFO, LDGCOL, LDU, N, SMLSIZ, SQRE
16
17 INTEGER GIVCOL( LDGCOL, * ), GIVPTR( * ), IWORK( * ), K( *
18 ), PERM( LDGCOL, * )
19
20 DOUBLE PRECISION C( * ), D( * ), DIFL( LDU, * ), DIFR( LDU,
21 * ), E( * ), GIVNUM( LDU, * ), POLES( LDU, * ), S( *
22 ), U( LDU, * ), VT( LDU, * ), WORK( * ), Z( LDU, * )
23
25 Using a divide and conquer approach, DLASDA computes the singular value
26 decomposition (SVD) of a real upper bidiagonal N-by-M matrix B with
27 diagonal D and offdiagonal E, where M = N + SQRE. The algorithm com‐
28 putes the singular values in the SVD B = U * S * VT. The orthogonal
29 matrices U and VT are optionally computed in compact form.
30
31 A related subroutine, DLASD0, computes the singular values and the sin‐
32 gular vectors in explicit form.
33
34
36 ICOMPQ (input) INTEGER Specifies whether singular vectors are to be
37 computed in compact form, as follows = 0: Compute singular values only.
38 = 1: Compute singular vectors of upper bidiagonal matrix in compact
39 form.
40
41 SMLSIZ (input) INTEGER The maximum size of the subproblems at the bot‐
42 tom of the computation tree.
43
44 N (input) INTEGER
45 The row dimension of the upper bidiagonal matrix. This is also
46 the dimension of the main diagonal array D.
47
48 SQRE (input) INTEGER
49 Specifies the column dimension of the bidiagonal matrix. = 0:
50 The bidiagonal matrix has column dimension M = N;
51 = 1: The bidiagonal matrix has column dimension M = N + 1.
52
53 D (input/output) DOUBLE PRECISION array, dimension ( N )
54 On entry D contains the main diagonal of the bidiagonal matrix.
55 On exit D, if INFO = 0, contains its singular values.
56
57 E (input) DOUBLE PRECISION array, dimension ( M-1 )
58 Contains the subdiagonal entries of the bidiagonal matrix. On
59 exit, E has been destroyed.
60
61 U (output) DOUBLE PRECISION array,
62 dimension ( LDU, SMLSIZ ) if ICOMPQ = 1, and not referenced if
63 ICOMPQ = 0. If ICOMPQ = 1, on exit, U contains the left singular
64 vector matrices of all subproblems at the bottom level.
65
66 LDU (input) INTEGER, LDU = > N.
67 The leading dimension of arrays U, VT, DIFL, DIFR, POLES,
68 GIVNUM, and Z.
69
70 VT (output) DOUBLE PRECISION array,
71 dimension ( LDU, SMLSIZ+1 ) if ICOMPQ = 1, and not referenced if
72 ICOMPQ = 0. If ICOMPQ = 1, on exit, VT' contains the right sin‐
73 gular vector matrices of all subproblems at the bottom level.
74
75 K (output) INTEGER array,
76 dimension ( N ) if ICOMPQ = 1 and dimension 1 if ICOMPQ = 0. If
77 ICOMPQ = 1, on exit, K(I) is the dimension of the I-th secular
78 equation on the computation tree.
79
80 DIFL (output) DOUBLE PRECISION array, dimension ( LDU, NLVL ),
81 where NLVL = floor(log_2 (N/SMLSIZ))).
82
83 DIFR (output) DOUBLE PRECISION array,
84 dimension ( LDU, 2 * NLVL ) if ICOMPQ = 1 and dimension ( N ) if
85 ICOMPQ = 0. If ICOMPQ = 1, on exit, DIFL(1:N, I) and DIFR(1:N,
86 2 * I - 1) record distances between singular values on the I-th
87 level and singular values on the (I -1)-th level, and DIFR(1:N,
88 2 * I ) contains the normalizing factors for the right singular
89 vector matrix. See DLASD8 for details.
90
91 Z (output) DOUBLE PRECISION array,
92 dimension ( LDU, NLVL ) if ICOMPQ = 1 and dimension ( N ) if
93 ICOMPQ = 0. The first K elements of Z(1, I) contain the compo‐
94 nents of the deflation-adjusted updating row vector for subprob‐
95 lems on the I-th level.
96
97 POLES (output) DOUBLE PRECISION array,
98 dimension ( LDU, 2 * NLVL ) if ICOMPQ = 1, and not referenced if
99 ICOMPQ = 0. If ICOMPQ = 1, on exit, POLES(1, 2*I - 1) and
100 POLES(1, 2*I) contain the new and old singular values involved
101 in the secular equations on the I-th level.
102
103 GIVPTR (output) INTEGER array, dimension ( N ) if ICOMPQ = 1,
104 and not referenced if ICOMPQ = 0. If ICOMPQ = 1, on exit,
105 GIVPTR( I ) records the number of Givens rotations performed on
106 the I-th problem on the computation tree.
107
108 GIVCOL (output) INTEGER array, dimension ( LDGCOL, 2 * NLVL ) if
109 ICOMPQ = 1, and not referenced if ICOMPQ = 0. If ICOMPQ = 1, on
110 exit, for each I, GIVCOL(1, 2 *I - 1) and GIVCOL(1, 2 *I) record
111 the locations of Givens rotations performed on the I-th level on
112 the computation tree.
113
114 LDGCOL (input) INTEGER, LDGCOL = > N. The leading dimension of
115 arrays GIVCOL and PERM.
116
117 PERM (output) INTEGER array,
118 dimension ( LDGCOL, NLVL ) if ICOMPQ = 1, and not referenced if
119 ICOMPQ = 0. If ICOMPQ = 1, on exit, PERM(1, I) records permuta‐
120 tions done on the I-th level of the computation tree.
121
122 GIVNUM (output) DOUBLE PRECISION array, dimension ( LDU, 2 *
123 NLVL ) if ICOMPQ = 1, and not referenced if ICOMPQ = 0. If
124 ICOMPQ = 1, on exit, for each I, GIVNUM(1, 2 *I - 1) and
125 GIVNUM(1, 2 *I) record the C- and S- values of Givens rotations
126 performed on the I-th level on the computation tree.
127
128 C (output) DOUBLE PRECISION array,
129 dimension ( N ) if ICOMPQ = 1, and dimension 1 if ICOMPQ = 0.
130 If ICOMPQ = 1 and the I-th subproblem is not square, on exit, C(
131 I ) contains the C-value of a Givens rotation related to the
132 right null space of the I-th subproblem.
133
134 S (output) DOUBLE PRECISION array, dimension ( N ) if
135 ICOMPQ = 1, and dimension 1 if ICOMPQ = 0. If ICOMPQ = 1 and the
136 I-th subproblem is not square, on exit, S( I ) contains the S-
137 value of a Givens rotation related to the right null space of
138 the I-th subproblem.
139
140 WORK (workspace) DOUBLE PRECISION array, dimension
141 (6 * N + (SMLSIZ + 1)*(SMLSIZ + 1)).
142
143 IWORK (workspace) INTEGER array.
144 Dimension must be at least (7 * N).
145
146 INFO (output) INTEGER
147 = 0: successful exit.
148 < 0: if INFO = -i, the i-th argument had an illegal value.
149 > 0: if INFO = 1, an singular value did not converge
150
152 Based on contributions by
153 Ming Gu and Huan Ren, Computer Science Division, University of
154 California at Berkeley, USA
155
156
157
158
159 LAPACK auxiliary routine (versionNo3v.e1m)ber 2006 DLASDA(1)