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

NAME

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

SYNOPSIS

12       SUBROUTINE DPOSVXX( 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           DOUBLE          PRECISION RCOND, RPVGRW
25
26           INTEGER         IWORK( * )
27
28           DOUBLE          PRECISION A( LDA, * ), AF( LDAF, * ), B( LDB, *  ),
29                           X( LDX, * ), WORK( * )
30
31           DOUBLE          PRECISION   S(  *  ),  PARAMS(  *  ),  BERR(  *  ),
32                           ERR_BNDS_NORM( NRHS, * ), ERR_BNDS_COMP( NRHS, * )
33

PURPOSE

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

DESCRIPTION

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

ARGUMENTS

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