1CGERFSX(1) LAPACK routine (version 3.2)                             CGERFSX(1)
2
3
4

NAME

6       CGERFSX  -  CGERFSX improve the computed solution to a system of linear
7       equations and provides error bounds and backward error  estimates   for
8       the solution
9

SYNOPSIS

11       SUBROUTINE CGERFSX( TRANS,  EQUED,  N, NRHS, A, LDA, AF, LDAF, IPIV, R,
12                           C,  B,  LDB,  X,  LDX,  RCOND,  BERR,   N_ERR_BNDS,
13                           ERR_BNDS_NORM,   ERR_BNDS_COMP,   NPARAMS,  PARAMS,
14                           WORK, RWORK, INFO )
15
16           IMPLICIT        NONE
17
18           CHARACTER       TRANS, EQUED
19
20           INTEGER         INFO,  LDA,  LDAF,  LDB,  LDX,  N,  NRHS,  NPARAMS,
21                           N_ERR_BNDS
22
23           REAL            RCOND
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

PURPOSE

35          CGERFSX improves the computed solution to a system of linear
36          equations and provides error bounds and backward error estimates
37          for the solution.  In addition to normwise error bound, the code
38          provides maximum componentwise error bound if possible.  See
39          comments for ERR_BNDS_N and ERR_BNDS_C for details of the error
40          bounds.
41          The original system of linear equations may have been equilibrated
42          before calling this routine, as described by arguments EQUED, R
43          and C below. In this case, the solution and error bounds returned
44          are for the original unequilibrated system.
45

ARGUMENTS

47       Some optional parameters are bundled in the PARAMS array.   These  set‐
48       tings determine how refinement is performed, but often the defaults are
49       acceptable.  If the defaults are acceptable, users can pass NPARAMS = 0
50       which prevents the source code from accessing the PARAMS argument.
51
52       TRANS   (input) CHARACTER*1
53               Specifies the form of the system of equations:
54               = 'N':  A * X = B     (No transpose)
55               = 'T':  A**T * X = B  (Transpose)
56               = 'C':  A**H * X = B  (Conjugate transpose = Transpose)
57
58       EQUED   (input) CHARACTER*1
59               Specifies  the  form of equilibration that was done to A before
60               calling this routine. This is needed to  compute  the  solution
61               and error bounds correctly.  = 'N':  No equilibration
62               =  'R':   Row  equilibration, i.e., A has been premultiplied by
63               diag(R).  = 'C':  Column equilibration, i.e., A has been  post‐
64               multiplied  by diag(C).  = 'B':  Both row and column equilibra‐
65               tion, i.e., A has been replaced by diag(R) * A * diag(C).   The
66               right hand side B has been changed accordingly.
67
68       N       (input) INTEGER
69               The order of the matrix A.  N >= 0.
70
71       NRHS    (input) INTEGER
72               The  number of right hand sides, i.e., the number of columns of
73               the matrices B and X.  NRHS >= 0.
74
75       A       (input) COMPLEX array, dimension (LDA,N)
76               The original N-by-N matrix A.
77
78       LDA     (input) INTEGER
79               The leading dimension of the array A.  LDA >= max(1,N).
80
81       AF      (input) COMPLEX array, dimension (LDAF,N)
82               The factors L and U from the factorization A =  P*L*U  as  com‐
83               puted by CGETRF.
84
85       LDAF    (input) INTEGER
86               The leading dimension of the array AF.  LDAF >= max(1,N).
87
88       IPIV    (input) INTEGER array, dimension (N)
89               The pivot indices from CGETRF; for 1<=i<=N, row i of the matrix
90               was interchanged with row IPIV(i).
91
92       R       (input or output) REAL array, dimension (N)
93               The row scale factors for A.  If EQUED = 'R' or 'B', A is  mul‐
94               tiplied on the left by diag(R); if EQUED = 'N' or 'C', R is not
95               accessed.  R is an input argument if FACT = 'F';  otherwise,  R
96               is  an  output argument.  If FACT = 'F' and EQUED = 'R' or 'B',
97               each element of R must be positive.  If R is output, each  ele‐
98               ment of R is a power of the radix.  If R is input, each element
99               of R should be a power of the radix to ensure a reliable  solu‐
100               tion  and  error estimates. Scaling by powers of the radix does
101               not cause rounding errors unless the result underflows or over‐
102               flows.  Rounding  errors during scaling lead to refining with a
103               matrix that is not equivalent to the  input  matrix,  producing
104               error estimates that may not be reliable.
105
106       C       (input or output) REAL array, dimension (N)
107               The  column  scale  factors for A.  If EQUED = 'C' or 'B', A is
108               multiplied on the right by diag(C); if EQUED = 'N' or 'R', C is
109               not accessed.  C is an input argument if FACT = 'F'; otherwise,
110               C is an output argument.  If FACT = 'F' and EQUED = 'C' or 'B',
111               each  element of C must be positive.  If C is output, each ele‐
112               ment of C is a power of the radix.  If C is input, each element
113               of  C should be a power of the radix to ensure a reliable solu‐
114               tion and error estimates. Scaling by powers of the  radix  does
115               not cause rounding errors unless the result underflows or over‐
116               flows. Rounding errors during scaling lead to refining  with  a
117               matrix  that  is  not equivalent to the input matrix, producing
118               error estimates that may not be reliable.
119
120       B       (input) COMPLEX array, dimension (LDB,NRHS)
121               The right hand side matrix B.
122
123       LDB     (input) INTEGER
124               The leading dimension of the array B.  LDB >= max(1,N).
125
126       X       (input/output) COMPLEX array, dimension (LDX,NRHS)
127               On entry, the solution matrix X, as  computed  by  CGETRS.   On
128               exit, the improved solution matrix X.
129
130       LDX     (input) INTEGER
131               The leading dimension of the array X.  LDX >= max(1,N).
132
133       RCOND   (output) REAL
134               Reciprocal scaled condition number.  This is an estimate of the
135               reciprocal Skeel condition number of the matrix A after equili‐
136               bration  (if done).  If this is less than the machine precision
137               (in particular, if it is zero), the matrix is singular to work‐
138               ing  precision.  Note that the error may still be small even if
139               this number is very small and the matrix  appears  ill-  condi‐
140               tioned.
141
142       BERR    (output) REAL array, dimension (NRHS)
143               Componentwise  relative backward error.  This is the component‐
144               wise relative backward  error  of  each  solution  vector  X(j)
145               (i.e.,  the  smallest  relative change in any element of A or B
146               that makes X(j) an exact solution).  N_ERR_BNDS (input) INTEGER
147               Number  of  error bounds to return for each right hand side and
148               each type (normwise or componentwise).  See  ERR_BNDS_NORM  and
149               ERR_BNDS_COMP below.
150
151       ERR_BNDS_NORM  (output) REAL array, dimension (NRHS, N_ERR_BNDS)
152                      For  each  right-hand side, this array contains informa‐
153                      tion about various error bounds  and  condition  numbers
154                      corresponding  to  the normwise relative error, which is
155                      defined as follows: Normwise relative error in  the  ith
156                      solution   vector:   max_j  (abs(XTRUE(j,i)  -  X(j,i)))
157                      ------------------------------  max_j  abs(X(j,i))   The
158                      array  is  indexed  by  the type of error information as
159                      described below. There currently are up to three  pieces
160                      of   information   returned.    The   first   index   in
161                      ERR_BNDS_NORM(i,:) corresponds  to  the  ith  right-hand
162                      side.  The second index in ERR_BNDS_NORM(:,err) contains
163                      the following three fields: err = 1 "Trust/don't  trust"
164                      boolean.  Trust  the  answer if the reciprocal condition
165                      number  is   less   than   the   threshold   sqrt(n)   *
166                      slamch('Epsilon').   err  =  2 "Guaranteed" error bound:
167                      The estimated forward error, almost certainly  within  a
168                      factor of 10 of the true error so long as the next entry
169                      is   greater    than    the    threshold    sqrt(n)    *
170                      slamch('Epsilon').  This  error  bound  should  only  be
171                      trusted if the  previous  boolean  is  true.   err  =  3
172                      Reciprocal condition number: Estimated normwise recipro‐
173                      cal  condition  number.   Compared  with  the  threshold
174                      sqrt(n)  *  slamch('Epsilon')  to determine if the error
175                      estimate is  "guaranteed".  These  reciprocal  condition
176                      numbers  are  1  /  (norm(Z^{-1},inf) * norm(Z,inf)) for
177                      some appropriately scaled matrix Z.  Let Z = S*A,  where
178                      S  scales  each row by a power of the radix so all abso‐
179                      lute row sums of Z  are  approximately  1.   See  Lapack
180                      Working Note 165 for further details and extra cautions.
181
182       ERR_BNDS_COMP  (output) REAL array, dimension (NRHS, N_ERR_BNDS)
183                      For  each  right-hand side, this array contains informa‐
184                      tion about various error bounds  and  condition  numbers
185                      corresponding to the componentwise relative error, which
186                      is defined as follows: Componentwise relative  error  in
187                      the  ith solution vector: abs(XTRUE(j,i) - X(j,i)) max_j
188                      ---------------------- abs(X(j,i)) The array is  indexed
189                      by  the  right-hand  side  i (on which the componentwise
190                      relative error depends), and the type of error  informa‐
191                      tion as described below. There currently are up to three
192                      pieces of information returned for each right-hand side.
193                      If  componentwise accuracy is not requested (PARAMS(3) =
194                      0.0), then ERR_BNDS_COMP is not accessed.  If N_ERR_BNDS
195                      .LT.  3,  then  at most the first (:,N_ERR_BNDS) entries
196                      are returned.  The  first  index  in  ERR_BNDS_COMP(i,:)
197                      corresponds  to  the  ith  right-hand  side.  The second
198                      index in  ERR_BNDS_COMP(:,err)  contains  the  following
199                      three fields: err = 1 "Trust/don't trust" boolean. Trust
200                      the answer if the reciprocal condition  number  is  less
201                      than the threshold sqrt(n) * slamch('Epsilon').  err = 2
202                      "Guaranteed" error bound: The estimated  forward  error,
203                      almost certainly within a factor of 10 of the true error
204                      so long as the next entry is greater than the  threshold
205                      sqrt(n)  *  slamch('Epsilon').  This  error bound should
206                      only be trusted if the previous boolean is true.  err  =
207                      3   Reciprocal condition number: Estimated componentwise
208                      reciprocal condition number.  Compared with the  thresh‐
209                      old  sqrt(n)  *  slamch('Epsilon')  to  determine if the
210                      error estimate is "guaranteed". These reciprocal  condi‐
211                      tion  numbers  are  1 / (norm(Z^{-1},inf) * norm(Z,inf))
212                      for  some  appropriately  scaled  matrix  Z.   Let  Z  =
213                      S*(A*diag(x)),  where  x is the solution for the current
214                      right-hand side and S scales each row of A*diag(x) by  a
215                      power  of  the  radix  so all absolute row sums of Z are
216                      approximately 1.  See Lapack Working Note 165  for  fur‐
217                      ther  details and extra cautions.  NPARAMS (input) INTE‐
218                      GER Specifies the number of parameters  set  in  PARAMS.
219                      If  .LE.  0,  the  PARAMS  array is never referenced and
220                      default values are used.
221
222       PARAMS  (input / output) REAL array, dimension NPARAMS
223               Specifies algorithm parameters.  If an entry is .LT. 0.0,  then
224               that  entry  will  be  filled  with default value used for that
225               parameter.  Only positions up to NPARAMS are accessed; defaults
226               are       used       for       higher-numbered      parameters.
227               PARAMS(LA_LINRX_ITREF_I = 1) :  Whether  to  perform  iterative
228               refinement or not.  Default: 1.0
229               =  0.0  :  No  refinement is performed, and no error bounds are
230               computed.  = 1.0 : Use the  double-precision  refinement  algo‐
231               rithm,  possibly with doubled-single computations if the compi‐
232               lation environment does not support DOUBLE  PRECISION.   (other
233               values are reserved for future use) PARAMS(LA_LINRX_ITHRESH_I =
234               2) :  Maximum  number  of  residual  computations  allowed  for
235               refinement.  Default: 10
236               Aggressive:  Set to 100 to permit convergence using approximate
237               factorizations or factorizations other than LU. If the  factor‐
238               ization  uses  a technique other than Gaussian elimination, the
239               guarantees in err_bnds_norm and err_bnds_comp may no longer  be
240               trustworthy.   PARAMS(LA_LINRX_CWISE_I  = 3) : Flag determining
241               if the code will attempt to find a solution with  small  compo‐
242               nentwise  relative  error  in  the  double-precision algorithm.
243               Positive is true, 0.0 is false.  Default: 1.0  (attempt  compo‐
244               nentwise convergence)
245
246       WORK    (workspace) REAL array, dimension (4*N)
247
248       IWORK   (workspace) INTEGER array, dimension (N)
249
250       INFO    (output) INTEGER
251               = 0:  Successful exit. The solution to every right-hand side is
252               guaranteed.  < 0:  If INFO = -i, the i-th argument had an ille‐
253               gal value
254               > 0 and <= N:  U(INFO,INFO) is exactly zero.  The factorization
255               has been completed, but the factor U is  exactly  singular,  so
256               the  solution and error bounds could not be computed. RCOND = 0
257               is returned.  = N+J: The  solution  corresponding  to  the  Jth
258               right-hand  side is not guaranteed. The solutions corresponding
259               to other right- hand sides K with K > J may not  be  guaranteed
260               as  well,  but only the first such right-hand side is reported.
261               If a small componentwise error is not  requested  (PARAMS(3)  =
262               0.0)  then the Jth right-hand side is the first with a normwise
263               error bound that is not guaranteed (the smallest  J  such  that
264               ERR_BNDS_NORM(J,1) = 0.0). By default (PARAMS(3) = 1.0) the Jth
265               right-hand side is the first with either a normwise  or  compo‐
266               nentwise  error  bound  that  is not guaranteed (the smallest J
267               such that either ERR_BNDS_NORM(J,1) = 0.0 or ERR_BNDS_COMP(J,1)
268               =   0.0).   See   the   definition  of  ERR_BNDS_NORM(:,1)  and
269               ERR_BNDS_COMP(:,1). To get information about all of the  right-
270               hand sides check ERR_BNDS_NORM or ERR_BNDS_COMP.
271
272
273
274    LAPACK routine (version 3.2) November 2008                      CGERFSX(1)
Impressum