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

NAME

6       DSYRFSX  -  DSYRFSX improve the computed solution to a system of linear
7       equations when the coefficient  matrix  is  symmetric  indefinite,  and
8       provides error bounds and backward error estimates for the  solution
9

SYNOPSIS

11       SUBROUTINE DSYRFSX( UPLO, EQUED, N, NRHS, A, LDA, AF, LDAF, IPIV, S, B,
12                           LDB,   X,    LDX,    RCOND,    BERR,    N_ERR_BNDS,
13                           ERR_BNDS_NORM,   ERR_BNDS_COMP,   NPARAMS,  PARAMS,
14                           WORK, IWORK, INFO )
15
16           IMPLICIT        NONE
17
18           CHARACTER       UPLO, EQUED
19
20           INTEGER         INFO,  LDA,  LDAF,  LDB,  LDX,  N,  NRHS,  NPARAMS,
21                           N_ERR_BNDS
22
23           DOUBLE          PRECISION RCOND
24
25           INTEGER         IPIV( * ), IWORK( * )
26
27           DOUBLE          PRECISION  A( LDA, * ), AF( LDAF, * ), B( LDB, * ),
28                           X( LDX, * ), WORK( * )
29
30           DOUBLE          PRECISION  S(  *  ),  PARAMS(  *  ),  BERR(  *   ),
31                           ERR_BNDS_NORM( NRHS, * ), ERR_BNDS_COMP( NRHS, * )
32

PURPOSE

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

ARGUMENTS

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