1SPOSVXX(1) LAPACK driver routine (version 3.2)                      SPOSVXX(1)
2
3
4

NAME

6       SPOSVXX  -  SPOSVXX  use  the  Cholesky factorization A = U**T*U or A =
7       L*L**T  to compute the solution to a real system of linear equations  A
8       * X = B, where A is an N-by-N symmetric positive definite matrix  and X
9       and B are N-by-NRHS matrices
10

SYNOPSIS

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

PURPOSE

35          SPOSVXX uses the Cholesky factorization A = U**T*U or A = L*L**T
36          to compute the solution to a real system of linear equations
37          A * X = B, where A is an N-by-N symmetric positive definite matrix
38          and X and B are N-by-NRHS matrices.
39          If requested, both normwise and maximum componentwise error bounds
40          are returned. SPOSVXX will return a solution with a tiny
41          guaranteed error (O(eps) where eps is the working machine
42          precision) unless the matrix is very ill-conditioned, in which
43          case a warning is returned. Relevant condition numbers also are
44          calculated and returned.
45          SPOSVXX accepts user-provided factorizations and equilibration
46          factors; see the definitions of the FACT and EQUED options.
47          Solving with refinement and using a factorization from a previous
48          SPOSVXX call will also produce a solution with either O(eps)
49          errors or warnings, but we cannot make that claim for general
50          user-provided factorizations and equilibration factors if they
51          differ from what SPOSVXX would itself produce.
52

DESCRIPTION

54          The following steps are performed:
55          1. If FACT = 'E', real scaling factors are computed to equilibrate
56          the system:
57            diag(S)*A*diag(S)     *inv(diag(S))*X = diag(S)*B
58          Whether or not the system will be equilibrated depends on the
59          scaling of the matrix A, but if equilibration is used, A is
60          overwritten by diag(S)*A*diag(S) and B by diag(S)*B.
61          2. If FACT = 'N' or 'E', the Cholesky decomposition is used to
62          factor the matrix A (after equilibration if FACT = 'E') as
63             A = U**T* U,  if UPLO = 'U', or
64             A = L * L**T,  if UPLO = 'L',
65          where U is an upper triangular matrix and L is a lower triangular
66          matrix.
67          3. If the leading i-by-i principal minor is not positive definite,
68          then the routine returns with INFO = i. Otherwise, the factored
69          form of A is used to estimate the condition number of the matrix
70          A (see argument RCOND).  If the reciprocal of the condition number
71          is less than machine precision, the routine still goes on to solve
72          for X and compute error bounds as described below.
73          4. The system of equations is solved for X using the factored form
74          of A.
75          5. By default (unless PARAMS(LA_LINRX_ITREF_I) is set to zero),
76          the routine will use iterative refinement to try to get a small
77          error and error bounds.  Refinement calculates the residual to at
78          least twice the working precision.
79          6. If equilibration was used, the matrix X is premultiplied by
80          diag(S) so that it solves the original system before
81          equilibration.
82

ARGUMENTS

84       Some optional parameters are bundled in the PARAMS array.   These  set‐
85       tings determine how refinement is performed, but often the defaults are
86       acceptable.  If the defaults are acceptable, users can pass NPARAMS = 0
87       which prevents the source code from accessing the PARAMS argument.
88
89       FACT    (input) CHARACTER*1
90               Specifies  whether  or not the factored form of the matrix A is
91               supplied on entry, and if not, whether the matrix A  should  be
92               equilibrated  before it is factored.  = 'F':  On entry, AF con‐
93               tains the factored form of A.  If EQUED is not 'N', the  matrix
94               A has been equilibrated with scaling factors given by S.  A and
95               AF are not modified.  = 'N':  The matrix A will be copied to AF
96               and factored.
97               =  'E':   The  matrix A will be equilibrated if necessary, then
98               copied to AF and factored.
99
100       UPLO    (input) CHARACTER*1
101               = 'U':  Upper triangle of A is stored;
102               = 'L':  Lower triangle of A is stored.
103
104       N       (input) INTEGER
105               The number of linear equations, i.e., the order of  the  matrix
106               A.  N >= 0.
107
108       NRHS    (input) INTEGER
109               The  number of right hand sides, i.e., the number of columns of
110               the matrices B and X.  NRHS >= 0.
111
112       A       (input/output) REAL array, dimension (LDA,N)
113               On entry, the symmetric matrix A, except  if  FACT  =  'F'  and
114               EQUED  =  'Y',  then  A  must  contain  the equilibrated matrix
115               diag(S)*A*diag(S).  If UPLO = 'U',  the  leading  N-by-N  upper
116               triangular  part of A contains the upper triangular part of the
117               matrix A, and the strictly lower triangular part of  A  is  not
118               referenced.  If UPLO = 'L', the leading N-by-N lower triangular
119               part of A contains the lower triangular part of the  matrix  A,
120               and  the strictly upper triangular part of A is not referenced.
121               A is not modified if FACT = 'F' or 'N', or if FACT  =  'E'  and
122               EQUED = 'N' on exit.  On exit, if FACT = 'E' and EQUED = 'Y', A
123               is overwritten by diag(S)*A*diag(S).
124
125       LDA     (input) INTEGER
126               The leading dimension of the array A.  LDA >= max(1,N).
127
128       AF      (input or output) REAL array, dimension (LDAF,N)
129               If FACT = 'F', then AF is an input argument and on  entry  con‐
130               tains the triangular factor U or L from the Cholesky factoriza‐
131               tion A = U**T*U or A = L*L**T, in the same storage format as A.
132               If  EQUED .ne. 'N', then AF is the factored form of the equili‐
133               brated matrix diag(S)*A*diag(S).  If FACT = 'N', then AF is  an
134               output  argument and on exit returns the triangular factor U or
135               L from the Cholesky factorization A = U**T*U or A =  L*L**T  of
136               the  original  matrix  A.   If FACT = 'E', then AF is an output
137               argument and on exit returns the triangular factor U or L  from
138               the  Cholesky  factorization  A  =  U**T*U or A = L*L**T of the
139               equilibrated matrix A (see the description of A for the form of
140               the equilibrated matrix).
141
142       LDAF    (input) INTEGER
143               The leading dimension of the array AF.  LDAF >= max(1,N).
144
145       EQUED   (input or output) CHARACTER*1
146               Specifies  the form of equilibration that was done.  = 'N':  No
147               equilibration (always true if FACT = 'N').
148               = 'Y':  Both row and column equilibration,  i.e.,  A  has  been
149               replaced  by diag(S) * A * diag(S).  EQUED is an input argument
150               if FACT = 'F'; otherwise, it is an output argument.
151
152       S       (input or output) REAL array, dimension (N)
153               The row scale factors for A.  If EQUED = 'Y', A  is  multiplied
154               on  the  left  and right by diag(S).  S is an input argument if
155               FACT = 'F'; otherwise, S is an output argument.  If FACT =  'F'
156               and  EQUED  = 'Y', each element of S must be positive.  If S is
157               output, each element of S is a power of  the  radix.  If  S  is
158               input,  each  element  of  S  should be a power of the radix to
159               ensure a reliable solution and error estimates. Scaling by pow‐
160               ers  of  the  radix  does  not cause rounding errors unless the
161               result underflows or overflows.  Rounding errors during scaling
162               lead  to  refining  with a matrix that is not equivalent to the
163               input matrix, producing error estimates that may not  be  reli‐
164               able.
165
166       B       (input/output) REAL array, dimension (LDB,NRHS)
167               On  entry, the N-by-NRHS right hand side matrix B.  On exit, if
168               EQUED = 'N', B is not modified; if EQUED = 'Y', B is  overwrit‐
169               ten by diag(S)*B;
170
171       LDB     (input) INTEGER
172               The leading dimension of the array B.  LDB >= max(1,N).
173
174       X       (output) REAL array, dimension (LDX,NRHS)
175               If  INFO  =  0, the N-by-NRHS solution matrix X to the original
176               system of equations.  Note that A and B are modified on exit if
177               EQUED  .ne. 'N', and the solution to the equilibrated system is
178               inv(diag(S))*X.
179
180       LDX     (input) INTEGER
181               The leading dimension of the array X.  LDX >= max(1,N).
182
183       RCOND   (output) REAL
184               Reciprocal scaled condition number.  This is an estimate of the
185               reciprocal Skeel condition number of the matrix A after equili‐
186               bration (if done).  If this is less than the machine  precision
187               (in particular, if it is zero), the matrix is singular to work‐
188               ing precision.  Note that the error may still be small even  if
189               this  number  is  very small and the matrix appears ill- condi‐
190               tioned.
191
192       RPVGRW  (output) REAL
193               Reciprocal pivot growth.  On exit, this contains the reciprocal
194               pivot growth factor norm(A)/norm(U). The "max absolute element"
195               norm is used.  If this is much less than 1, then the  stability
196               of the LU factorization of the (equilibrated) matrix A could be
197               poor.  This also means that the solution X, estimated condition
198               numbers, and error bounds could be unreliable. If factorization
199               fails with 0<INFO<=N, then this contains the  reciprocal  pivot
200               growth factor for the leading INFO columns of A.
201
202       BERR    (output) REAL array, dimension (NRHS)
203               Componentwise  relative backward error.  This is the component‐
204               wise relative backward  error  of  each  solution  vector  X(j)
205               (i.e.,  the  smallest  relative change in any element of A or B
206               that makes X(j) an exact solution).  N_ERR_BNDS (input) INTEGER
207               Number  of  error bounds to return for each right hand side and
208               each type (normwise or componentwise).  See  ERR_BNDS_NORM  and
209               ERR_BNDS_COMP below.
210
211       ERR_BNDS_NORM  (output) REAL array, dimension (NRHS, N_ERR_BNDS)
212                      For  each  right-hand side, this array contains informa‐
213                      tion about various error bounds  and  condition  numbers
214                      corresponding  to  the normwise relative error, which is
215                      defined as follows: Normwise relative error in  the  ith
216                      solution   vector:   max_j  (abs(XTRUE(j,i)  -  X(j,i)))
217                      ------------------------------  max_j  abs(X(j,i))   The
218                      array  is  indexed  by  the type of error information as
219                      described below. There currently are up to three  pieces
220                      of   information   returned.    The   first   index   in
221                      ERR_BNDS_NORM(i,:) corresponds  to  the  ith  right-hand
222                      side.  The second index in ERR_BNDS_NORM(:,err) contains
223                      the following three fields: err = 1 "Trust/don't  trust"
224                      boolean.  Trust  the  answer if the reciprocal condition
225                      number  is   less   than   the   threshold   sqrt(n)   *
226                      slamch('Epsilon').   err  =  2 "Guaranteed" error bound:
227                      The estimated forward error, almost certainly  within  a
228                      factor of 10 of the true error so long as the next entry
229                      is   greater    than    the    threshold    sqrt(n)    *
230                      slamch('Epsilon').  This  error  bound  should  only  be
231                      trusted if the  previous  boolean  is  true.   err  =  3
232                      Reciprocal condition number: Estimated normwise recipro‐
233                      cal  condition  number.   Compared  with  the  threshold
234                      sqrt(n)  *  slamch('Epsilon')  to determine if the error
235                      estimate is  "guaranteed".  These  reciprocal  condition
236                      numbers  are  1  /  (norm(Z^{-1},inf) * norm(Z,inf)) for
237                      some appropriately scaled matrix Z.  Let Z = S*A,  where
238                      S  scales  each row by a power of the radix so all abso‐
239                      lute row sums of Z  are  approximately  1.   See  Lapack
240                      Working Note 165 for further details and extra cautions.
241
242       ERR_BNDS_COMP  (output) REAL array, dimension (NRHS, N_ERR_BNDS)
243                      For  each  right-hand side, this array contains informa‐
244                      tion about various error bounds  and  condition  numbers
245                      corresponding to the componentwise relative error, which
246                      is defined as follows: Componentwise relative  error  in
247                      the  ith solution vector: abs(XTRUE(j,i) - X(j,i)) max_j
248                      ---------------------- abs(X(j,i)) The array is  indexed
249                      by  the  right-hand  side  i (on which the componentwise
250                      relative error depends), and the type of error  informa‐
251                      tion as described below. There currently are up to three
252                      pieces of information returned for each right-hand side.
253                      If  componentwise accuracy is not requested (PARAMS(3) =
254                      0.0), then ERR_BNDS_COMP is not accessed.  If N_ERR_BNDS
255                      .LT.  3,  then  at most the first (:,N_ERR_BNDS) entries
256                      are returned.  The  first  index  in  ERR_BNDS_COMP(i,:)
257                      corresponds  to  the  ith  right-hand  side.  The second
258                      index in  ERR_BNDS_COMP(:,err)  contains  the  following
259                      three fields: err = 1 "Trust/don't trust" boolean. Trust
260                      the answer if the reciprocal condition  number  is  less
261                      than the threshold sqrt(n) * slamch('Epsilon').  err = 2
262                      "Guaranteed" error bound: The estimated  forward  error,
263                      almost certainly within a factor of 10 of the true error
264                      so long as the next entry is greater than the  threshold
265                      sqrt(n)  *  slamch('Epsilon').  This  error bound should
266                      only be trusted if the previous boolean is true.  err  =
267                      3   Reciprocal condition number: Estimated componentwise
268                      reciprocal condition number.  Compared with the  thresh‐
269                      old  sqrt(n)  *  slamch('Epsilon')  to  determine if the
270                      error estimate is "guaranteed". These reciprocal  condi‐
271                      tion  numbers  are  1 / (norm(Z^{-1},inf) * norm(Z,inf))
272                      for  some  appropriately  scaled  matrix  Z.   Let  Z  =
273                      S*(A*diag(x)),  where  x is the solution for the current
274                      right-hand side and S scales each row of A*diag(x) by  a
275                      power  of  the  radix  so all absolute row sums of Z are
276                      approximately 1.  See Lapack Working Note 165  for  fur‐
277                      ther  details and extra cautions.  NPARAMS (input) INTE‐
278                      GER Specifies the number of parameters  set  in  PARAMS.
279                      If  .LE.  0,  the  PARAMS  array is never referenced and
280                      default values are used.
281
282       PARAMS  (input / output) REAL array, dimension NPARAMS
283               Specifies algorithm parameters.  If an entry is .LT. 0.0,  then
284               that  entry  will  be  filled  with default value used for that
285               parameter.  Only positions up to NPARAMS are accessed; defaults
286               are       used       for       higher-numbered      parameters.
287               PARAMS(LA_LINRX_ITREF_I = 1) :  Whether  to  perform  iterative
288               refinement or not.  Default: 1.0
289               =  0.0  :  No  refinement is performed, and no error bounds are
290               computed.  = 1.0 : Use the  double-precision  refinement  algo‐
291               rithm,  possibly with doubled-single computations if the compi‐
292               lation environment does not support DOUBLE  PRECISION.   (other
293               values are reserved for future use) PARAMS(LA_LINRX_ITHRESH_I =
294               2) :  Maximum  number  of  residual  computations  allowed  for
295               refinement.  Default: 10
296               Aggressive:  Set to 100 to permit convergence using approximate
297               factorizations or factorizations other than LU. If the  factor‐
298               ization  uses  a technique other than Gaussian elimination, the
299               guarantees in err_bnds_norm and err_bnds_comp may no longer  be
300               trustworthy.   PARAMS(LA_LINRX_CWISE_I  = 3) : Flag determining
301               if the code will attempt to find a solution with  small  compo‐
302               nentwise  relative  error  in  the  double-precision algorithm.
303               Positive is true, 0.0 is false.  Default: 1.0  (attempt  compo‐
304               nentwise convergence)
305
306       WORK    (workspace) REAL array, dimension (4*N)
307
308       IWORK   (workspace) INTEGER array, dimension (N)
309
310       INFO    (output) INTEGER
311               = 0:  Successful exit. The solution to every right-hand side is
312               guaranteed.  < 0:  If INFO = -i, the i-th argument had an ille‐
313               gal value
314               > 0 and <= N:  U(INFO,INFO) is exactly zero.  The factorization
315               has been completed, but the factor U is  exactly  singular,  so
316               the  solution and error bounds could not be computed. RCOND = 0
317               is returned.  = N+J: The  solution  corresponding  to  the  Jth
318               right-hand  side is not guaranteed. The solutions corresponding
319               to other right- hand sides K with K > J may not  be  guaranteed
320               as  well,  but only the first such right-hand side is reported.
321               If a small componentwise error is not  requested  (PARAMS(3)  =
322               0.0)  then the Jth right-hand side is the first with a normwise
323               error bound that is not guaranteed (the smallest  J  such  that
324               ERR_BNDS_NORM(J,1) = 0.0). By default (PARAMS(3) = 1.0) the Jth
325               right-hand side is the first with either a normwise  or  compo‐
326               nentwise  error  bound  that  is not guaranteed (the smallest J
327               such that either ERR_BNDS_NORM(J,1) = 0.0 or ERR_BNDS_COMP(J,1)
328               =   0.0).   See   the   definition  of  ERR_BNDS_NORM(:,1)  and
329               ERR_BNDS_COMP(:,1). To get information about all of the  right-
330               hand sides check ERR_BNDS_NORM or ERR_BNDS_COMP.
331
332
333
334    LAPACK driver routine (versionNo3v.e2m)ber 2008                      SPOSVXX(1)
Impressum