1CGESVXX(1) LAPACK driver routine (version 3.2) CGESVXX(1)
2
3
4
6 CGESVXX - CGESVXX use the LU factorization to compute the solution to a
7 complex system of linear equations A * X = B, where A is an N-by-N
8 matrix and X and B are N-by-NRHS matrices
9
11 SUBROUTINE CGESVXX( FACT, TRANS, N, NRHS, A, LDA, AF, LDAF, IPIV,
12 EQUED, R, C, B, LDB, X, LDX, RCOND, RPVGRW, BERR,
13 N_ERR_BNDS, ERR_BNDS_NORM, ERR_BNDS_COMP, NPARAMS,
14 PARAMS, WORK, RWORK, INFO )
15
16 IMPLICIT NONE
17
18 CHARACTER EQUED, FACT, TRANS
19
20 INTEGER INFO, LDA, LDAF, LDB, LDX, N, NRHS, NPARAMS,
21 N_ERR_BNDS
22
23 REAL RCOND, RPVGRW
24
25 INTEGER IPIV( * )
26
27 COMPLEX A( LDA, * ), AF( LDAF, * ), B( LDB, * ), X( LDX , *
28 ),WORK( * )
29
30 REAL R( * ), C( * ), PARAMS( * ), BERR( * ),
31 ERR_BNDS_NORM( NRHS, * ), ERR_BNDS_COMP( NRHS, * ),
32 RWORK( * )
33
35 CGESVXX uses the LU factorization to compute the solution to a
36 complex system of linear equations A * X = B, where A is an
37 N-by-N matrix and X and B are N-by-NRHS matrices.
38 If requested, both normwise and maximum componentwise error bounds
39 are returned. CGESVXX will return a solution with a tiny
40 guaranteed error (O(eps) where eps is the working machine
41 precision) unless the matrix is very ill-conditioned, in which
42 case a warning is returned. Relevant condition numbers also are
43 calculated and returned.
44 CGESVXX accepts user-provided factorizations and equilibration
45 factors; see the definitions of the FACT and EQUED options.
46 Solving with refinement and using a factorization from a previous
47 CGESVXX call will also produce a solution with either O(eps)
48 errors or warnings, but we cannot make that claim for general
49 user-provided factorizations and equilibration factors if they
50 differ from what CGESVXX would itself produce.
51
53 The following steps are performed:
54 1. If FACT = 'E', real scaling factors are computed to equilibrate
55 the system:
56 TRANS = 'N': diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B
57 TRANS = 'T': (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
58 TRANS = 'C': (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
59 Whether or not the system will be equilibrated depends on the
60 scaling of the matrix A, but if equilibration is used, A is
61 overwritten by diag(R)*A*diag(C) and B by diag(R)*B (if TRANS='N')
62 or diag(C)*B (if TRANS = 'T' or 'C').
63 2. If FACT = 'N' or 'E', the LU decomposition is used to factor
64 the matrix A (after equilibration if FACT = 'E') as
65 A = P * L * U,
66 where P is a permutation matrix, L is a unit lower triangular
67 matrix, and U is upper triangular.
68 3. If some U(i,i)=0, so that U is exactly singular, then the
69 routine returns with INFO = i. Otherwise, the factored form of A
70 is used to estimate the condition number of the matrix A (see
71 argument RCOND). If the reciprocal of the condition number is less
72 than machine precision, the routine still goes on to solve for X
73 and compute error bounds as described below.
74 4. The system of equations is solved for X using the factored form
75 of A.
76 5. By default (unless PARAMS(LA_LINRX_ITREF_I) is set to zero),
77 the routine will use iterative refinement to try to get a small
78 error and error bounds. Refinement calculates the residual to at
79 least twice the working precision.
80 6. If equilibration was used, the matrix X is premultiplied by
81 diag(C) (if TRANS = 'N') or diag(R) (if TRANS = 'T' or 'C') so
82 that it solves the original system before equilibration.
83
85 Some optional parameters are bundled in the PARAMS array. These set‐
86 tings determine how refinement is performed, but often the defaults are
87 acceptable. If the defaults are acceptable, users can pass NPARAMS = 0
88 which prevents the source code from accessing the PARAMS argument.
89
90 FACT (input) CHARACTER*1
91 Specifies whether or not the factored form of the matrix A is
92 supplied on entry, and if not, whether the matrix A should be
93 equilibrated before it is factored. = 'F': On entry, AF and
94 IPIV contain the factored form of A. If EQUED is not 'N', the
95 matrix A has been equilibrated with scaling factors given by R
96 and C. A, AF, and IPIV are not modified. = 'N': The matrix A
97 will be copied to AF and factored.
98 = 'E': The matrix A will be equilibrated if necessary, then
99 copied to AF and factored.
100
101 TRANS (input) CHARACTER*1
102 Specifies the form of the system of equations:
103 = 'N': A * X = B (No transpose)
104 = 'T': A**T * X = B (Transpose)
105 = 'C': A**H * X = B (Conjugate Transpose)
106
107 N (input) INTEGER
108 The number of linear equations, i.e., the order of the matrix
109 A. N >= 0.
110
111 NRHS (input) INTEGER
112 The number of right hand sides, i.e., the number of columns of
113 the matrices B and X. NRHS >= 0.
114
115 A (input/output) COMPLEX array, dimension (LDA,N)
116 On entry, the N-by-N matrix A. If FACT = 'F' and EQUED is not
117 'N', then A must have been equilibrated by the scaling factors
118 in R and/or C. A is not modified if FACT = 'F' or 'N', or if
119 FACT = 'E' and EQUED = 'N' on exit. On exit, if EQUED .ne.
120 'N', A is scaled as follows: EQUED = 'R': A := diag(R) * A
121 EQUED = 'C': A := A * diag(C)
122 EQUED = 'B': A := diag(R) * A * diag(C).
123
124 LDA (input) INTEGER
125 The leading dimension of the array A. LDA >= max(1,N).
126
127 AF (input or output) COMPLEX array, dimension (LDAF,N)
128 If FACT = 'F', then AF is an input argument and on entry con‐
129 tains the factors L and U from the factorization A = P*L*U as
130 computed by CGETRF. If EQUED .ne. 'N', then AF is the factored
131 form of the equilibrated matrix A. If FACT = 'N', then AF is
132 an output argument and on exit returns the factors L and U from
133 the factorization A = P*L*U of the original matrix A. If FACT
134 = 'E', then AF is an output argument and on exit returns the
135 factors L and U from the factorization A = P*L*U of the equili‐
136 brated matrix A (see the description of A for the form of the
137 equilibrated matrix).
138
139 LDAF (input) INTEGER
140 The leading dimension of the array AF. LDAF >= max(1,N).
141
142 IPIV (input or output) INTEGER array, dimension (N)
143 If FACT = 'F', then IPIV is an input argument and on entry con‐
144 tains the pivot indices from the factorization A = P*L*U as
145 computed by CGETRF; row i of the matrix was interchanged with
146 row IPIV(i). If FACT = 'N', then IPIV is an output argument
147 and on exit contains the pivot indices from the factorization A
148 = P*L*U of the original matrix A. If FACT = 'E', then IPIV is
149 an output argument and on exit contains the pivot indices from
150 the factorization A = P*L*U of the equilibrated matrix A.
151
152 EQUED (input or output) CHARACTER*1
153 Specifies the form of equilibration that was done. = 'N': No
154 equilibration (always true if FACT = 'N').
155 = 'R': Row equilibration, i.e., A has been premultiplied by
156 diag(R). = 'C': Column equilibration, i.e., A has been post‐
157 multiplied by diag(C). = 'B': Both row and column equilibra‐
158 tion, i.e., A has been replaced by diag(R) * A * diag(C).
159 EQUED is an input argument if FACT = 'F'; otherwise, it is an
160 output argument.
161
162 R (input or output) REAL array, dimension (N)
163 The row scale factors for A. If EQUED = 'R' or 'B', A is mul‐
164 tiplied on the left by diag(R); if EQUED = 'N' or 'C', R is not
165 accessed. R is an input argument if FACT = 'F'; otherwise, R
166 is an output argument. If FACT = 'F' and EQUED = 'R' or 'B',
167 each element of R must be positive. If R is output, each ele‐
168 ment of R is a power of the radix. If R is input, each element
169 of R should be a power of the radix to ensure a reliable solu‐
170 tion and error estimates. Scaling by powers of the radix does
171 not cause rounding errors unless the result underflows or over‐
172 flows. Rounding errors during scaling lead to refining with a
173 matrix that is not equivalent to the input matrix, producing
174 error estimates that may not be reliable.
175
176 C (input or output) REAL array, dimension (N)
177 The column scale factors for A. If EQUED = 'C' or 'B', A is
178 multiplied on the right by diag(C); if EQUED = 'N' or 'R', C is
179 not accessed. C is an input argument if FACT = 'F'; otherwise,
180 C is an output argument. If FACT = 'F' and EQUED = 'C' or 'B',
181 each element of C must be positive. If C is output, each ele‐
182 ment of C is a power of the radix. If C is input, each element
183 of C should be a power of the radix to ensure a reliable solu‐
184 tion and error estimates. Scaling by powers of the radix does
185 not cause rounding errors unless the result underflows or over‐
186 flows. Rounding errors during scaling lead to refining with a
187 matrix that is not equivalent to the input matrix, producing
188 error estimates that may not be reliable.
189
190 B (input/output) COMPLEX array, dimension (LDB,NRHS)
191 On entry, the N-by-NRHS right hand side matrix B. On exit, if
192 EQUED = 'N', B is not modified; if TRANS = 'N' and EQUED = 'R'
193 or 'B', B is overwritten by diag(R)*B; if TRANS = 'T' or 'C'
194 and EQUED = 'C' or 'B', B is overwritten by diag(C)*B.
195
196 LDB (input) INTEGER
197 The leading dimension of the array B. LDB >= max(1,N).
198
199 X (output) COMPLEX array, dimension (LDX,NRHS)
200 If INFO = 0, the N-by-NRHS solution matrix X to the original
201 system of equations. Note that A and B are modified on exit if
202 EQUED .ne. 'N', and the solution to the equilibrated system is
203 inv(diag(C))*X if TRANS = 'N' and EQUED = 'C' or 'B', or
204 inv(diag(R))*X if TRANS = 'T' or 'C' and EQUED = 'R' or 'B'.
205
206 LDX (input) INTEGER
207 The leading dimension of the array X. LDX >= max(1,N).
208
209 RCOND (output) REAL
210 Reciprocal scaled condition number. This is an estimate of the
211 reciprocal Skeel condition number of the matrix A after equili‐
212 bration (if done). If this is less than the machine precision
213 (in particular, if it is zero), the matrix is singular to work‐
214 ing precision. Note that the error may still be small even if
215 this number is very small and the matrix appears ill- condi‐
216 tioned.
217
218 RPVGRW (output) REAL
219 Reciprocal pivot growth. On exit, this contains the reciprocal
220 pivot growth factor norm(A)/norm(U). The "max absolute element"
221 norm is used. If this is much less than 1, then the stability
222 of the LU factorization of the (equilibrated) matrix A could be
223 poor. This also means that the solution X, estimated condition
224 numbers, and error bounds could be unreliable. If factorization
225 fails with 0<INFO<=N, then this contains the reciprocal pivot
226 growth factor for the leading INFO columns of A. In CGESVX,
227 this quantity is returned in WORK(1).
228
229 BERR (output) REAL array, dimension (NRHS)
230 Componentwise relative backward error. This is the component‐
231 wise relative backward error of each solution vector X(j)
232 (i.e., the smallest relative change in any element of A or B
233 that makes X(j) an exact solution). N_ERR_BNDS (input) INTEGER
234 Number of error bounds to return for each right hand side and
235 each type (normwise or componentwise). See ERR_BNDS_NORM and
236 ERR_BNDS_COMP below.
237
238 ERR_BNDS_NORM (output) REAL array, dimension (NRHS, N_ERR_BNDS)
239 For each right-hand side, this array contains informa‐
240 tion about various error bounds and condition numbers
241 corresponding to the normwise relative error, which is
242 defined as follows: Normwise relative error in the ith
243 solution vector: max_j (abs(XTRUE(j,i) - X(j,i)))
244 ------------------------------ max_j abs(X(j,i)) The
245 array is indexed by the type of error information as
246 described below. There currently are up to three pieces
247 of information returned. The first index in
248 ERR_BNDS_NORM(i,:) corresponds to the ith right-hand
249 side. The second index in ERR_BNDS_NORM(:,err) contains
250 the following three fields: err = 1 "Trust/don't trust"
251 boolean. Trust the answer if the reciprocal condition
252 number is less than the threshold sqrt(n) *
253 slamch('Epsilon'). err = 2 "Guaranteed" error bound:
254 The estimated forward error, almost certainly within a
255 factor of 10 of the true error so long as the next entry
256 is greater than the threshold sqrt(n) *
257 slamch('Epsilon'). This error bound should only be
258 trusted if the previous boolean is true. err = 3
259 Reciprocal condition number: Estimated normwise recipro‐
260 cal condition number. Compared with the threshold
261 sqrt(n) * slamch('Epsilon') to determine if the error
262 estimate is "guaranteed". These reciprocal condition
263 numbers are 1 / (norm(Z^{-1},inf) * norm(Z,inf)) for
264 some appropriately scaled matrix Z. Let Z = S*A, where
265 S scales each row by a power of the radix so all abso‐
266 lute row sums of Z are approximately 1. See Lapack
267 Working Note 165 for further details and extra cautions.
268
269 ERR_BNDS_COMP (output) REAL array, dimension (NRHS, N_ERR_BNDS)
270 For each right-hand side, this array contains informa‐
271 tion about various error bounds and condition numbers
272 corresponding to the componentwise relative error, which
273 is defined as follows: Componentwise relative error in
274 the ith solution vector: abs(XTRUE(j,i) - X(j,i)) max_j
275 ---------------------- abs(X(j,i)) The array is indexed
276 by the right-hand side i (on which the componentwise
277 relative error depends), and the type of error informa‐
278 tion as described below. There currently are up to three
279 pieces of information returned for each right-hand side.
280 If componentwise accuracy is not requested (PARAMS(3) =
281 0.0), then ERR_BNDS_COMP is not accessed. If N_ERR_BNDS
282 .LT. 3, then at most the first (:,N_ERR_BNDS) entries
283 are returned. The first index in ERR_BNDS_COMP(i,:)
284 corresponds to the ith right-hand side. The second
285 index in ERR_BNDS_COMP(:,err) contains the following
286 three fields: err = 1 "Trust/don't trust" boolean. Trust
287 the answer if the reciprocal condition number is less
288 than the threshold sqrt(n) * slamch('Epsilon'). err = 2
289 "Guaranteed" error bound: The estimated forward error,
290 almost certainly within a factor of 10 of the true error
291 so long as the next entry is greater than the threshold
292 sqrt(n) * slamch('Epsilon'). This error bound should
293 only be trusted if the previous boolean is true. err =
294 3 Reciprocal condition number: Estimated componentwise
295 reciprocal condition number. Compared with the thresh‐
296 old sqrt(n) * slamch('Epsilon') to determine if the
297 error estimate is "guaranteed". These reciprocal condi‐
298 tion numbers are 1 / (norm(Z^{-1},inf) * norm(Z,inf))
299 for some appropriately scaled matrix Z. Let Z =
300 S*(A*diag(x)), where x is the solution for the current
301 right-hand side and S scales each row of A*diag(x) by a
302 power of the radix so all absolute row sums of Z are
303 approximately 1. See Lapack Working Note 165 for fur‐
304 ther details and extra cautions. NPARAMS (input) INTE‐
305 GER Specifies the number of parameters set in PARAMS.
306 If .LE. 0, the PARAMS array is never referenced and
307 default values are used.
308
309 PARAMS (input / output) REAL array, dimension NPARAMS
310 Specifies algorithm parameters. If an entry is .LT. 0.0, then
311 that entry will be filled with default value used for that
312 parameter. Only positions up to NPARAMS are accessed; defaults
313 are used for higher-numbered parameters.
314 PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative
315 refinement or not. Default: 1.0
316 = 0.0 : No refinement is performed, and no error bounds are
317 computed. = 1.0 : Use the double-precision refinement algo‐
318 rithm, possibly with doubled-single computations if the compi‐
319 lation environment does not support DOUBLE PRECISION. (other
320 values are reserved for future use) PARAMS(LA_LINRX_ITHRESH_I =
321 2) : Maximum number of residual computations allowed for
322 refinement. Default: 10
323 Aggressive: Set to 100 to permit convergence using approximate
324 factorizations or factorizations other than LU. If the factor‐
325 ization uses a technique other than Gaussian elimination, the
326 guarantees in err_bnds_norm and err_bnds_comp may no longer be
327 trustworthy. PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining
328 if the code will attempt to find a solution with small compo‐
329 nentwise relative error in the double-precision algorithm.
330 Positive is true, 0.0 is false. Default: 1.0 (attempt compo‐
331 nentwise convergence)
332
333 WORK (workspace) COMPLEX array, dimension (2*N)
334
335 RWORK (workspace) REAL array, dimension (3*N)
336
337 INFO (output) INTEGER
338 = 0: Successful exit. The solution to every right-hand side is
339 guaranteed. < 0: If INFO = -i, the i-th argument had an ille‐
340 gal value
341 > 0 and <= N: U(INFO,INFO) is exactly zero. The factorization
342 has been completed, but the factor U is exactly singular, so
343 the solution and error bounds could not be computed. RCOND = 0
344 is returned. = N+J: The solution corresponding to the Jth
345 right-hand side is not guaranteed. The solutions corresponding
346 to other right- hand sides K with K > J may not be guaranteed
347 as well, but only the first such right-hand side is reported.
348 If a small componentwise error is not requested (PARAMS(3) =
349 0.0) then the Jth right-hand side is the first with a normwise
350 error bound that is not guaranteed (the smallest J such that
351 ERR_BNDS_NORM(J,1) = 0.0). By default (PARAMS(3) = 1.0) the Jth
352 right-hand side is the first with either a normwise or compo‐
353 nentwise error bound that is not guaranteed (the smallest J
354 such that either ERR_BNDS_NORM(J,1) = 0.0 or ERR_BNDS_COMP(J,1)
355 = 0.0). See the definition of ERR_BNDS_NORM(:,1) and
356 ERR_BNDS_COMP(:,1). To get information about all of the right-
357 hand sides check ERR_BNDS_NORM or ERR_BNDS_COMP.
358
359
360
361 LAPACK driver routine (versionNo3v.e2m)ber 2008 CGESVXX(1)