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

NAME

6       DGESVX  -  uses  the LU factorization to compute the solution to a real
7       system of linear equations  A * X = B,
8

SYNOPSIS

10       SUBROUTINE DGESVX( FACT, TRANS, N, NRHS, A, LDA, AF, LDAF, IPIV, EQUED,
11                          R,  C,  B,  LDB,  X,  LDX,  RCOND, FERR, BERR, WORK,
12                          IWORK, INFO )
13
14           CHARACTER      EQUED, FACT, TRANS
15
16           INTEGER        INFO, LDA, LDAF, LDB, LDX, N, NRHS
17
18           DOUBLE         PRECISION RCOND
19
20           INTEGER        IPIV( * ), IWORK( * )
21
22           DOUBLE         PRECISION A( LDA, * ), AF( LDAF, * ), B( LDB,  *  ),
23                          BERR(  * ), C( * ), FERR( * ), R( * ), WORK( * ), X(
24                          LDX, * )
25

PURPOSE

27       DGESVX uses the LU factorization to compute the solution to a real sys‐
28       tem of linear equations
29          A  *  X  =  B, where A is an N-by-N matrix and X and B are N-by-NRHS
30       matrices.  Error bounds on the solution and a  condition  estimate  are
31       also provided.
32

DESCRIPTION

34       The following steps are performed:
35       1. If FACT = 'E', real scaling factors are computed to equilibrate
36          the system:
37             TRANS = 'N':  diag(R)*A*diag(C)     *inv(diag(C))*X = diag(R)*B
38             TRANS = 'T': (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B
39             TRANS = 'C': (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
40          Whether or not the system will be equilibrated depends on the
41          scaling of the matrix A, but if equilibration is used, A is
42          overwritten by diag(R)*A*diag(C) and B by diag(R)*B (if TRANS='N')
43          or diag(C)*B (if TRANS = 'T' or 'C').
44       2. If FACT = 'N' or 'E', the LU decomposition is used to factor the
45          matrix A (after equilibration if FACT = 'E') as
46             A = P * L * U,
47          where P is a permutation matrix, L is a unit lower triangular
48          matrix, and U is upper triangular.
49       3. If some U(i,i)=0, so that U is exactly singular, then the routine
50          returns with INFO = i. Otherwise, the factored form of A is used
51          to estimate the condition number of the matrix A.  If the
52          reciprocal of the condition number is less than machine precision,
53          INFO = N+1 is returned as a warning, but the routine still goes on
54          to  solve for X and compute error bounds as described below.  4. The
55       system of equations is solved for X using the factored form
56          of A.
57       5. Iterative refinement is applied to improve the computed solution
58          matrix and calculate error bounds and backward error estimates
59          for it.
60       6. If equilibration was used, the matrix X is premultiplied by
61          diag(C) (if TRANS = 'N') or diag(R) (if TRANS = 'T' or 'C') so
62          that it solves the original system before equilibration.
63

ARGUMENTS

65       FACT    (input) CHARACTER*1
66               Specifies whether or not the factored form of the matrix  A  is
67               supplied  on  entry, and if not, whether the matrix A should be
68               equilibrated before it is factored.  = 'F':  On entry,  AF  and
69               IPIV  contain the factored form of A.  If EQUED is not 'N', the
70               matrix A has been equilibrated with scaling factors given by  R
71               and C.  A, AF, and IPIV are not modified.  = 'N':  The matrix A
72               will be copied to AF and factored.
73               = 'E':  The matrix A will be equilibrated  if  necessary,  then
74               copied to AF and factored.
75
76       TRANS   (input) CHARACTER*1
77               Specifies the form of the system of equations:
78               = 'N':  A * X = B     (No transpose)
79               = 'T':  A**T * X = B  (Transpose)
80               = 'C':  A**H * X = B  (Transpose)
81
82       N       (input) INTEGER
83               The  number  of linear equations, i.e., the order of the matrix
84               A.  N >= 0.
85
86       NRHS    (input) INTEGER
87               The number of right hand sides, i.e., the number of columns  of
88               the matrices B and X.  NRHS >= 0.
89
90       A       (input/output) DOUBLE PRECISION array, dimension (LDA,N)
91               On  entry, the N-by-N matrix A.  If FACT = 'F' and EQUED is not
92               'N', then A must have been equilibrated by the scaling  factors
93               in  R  and/or C.  A is not modified if FACT = 'F' or 'N', or if
94               FACT = 'E' and EQUED = 'N' on exit.  On  exit,  if  EQUED  .ne.
95               'N', A is scaled as follows: EQUED = 'R':  A := diag(R) * A
96               EQUED = 'C':  A := A * diag(C)
97               EQUED = 'B':  A := diag(R) * A * diag(C).
98
99       LDA     (input) INTEGER
100               The leading dimension of the array A.  LDA >= max(1,N).
101
102       AF      (input or output) DOUBLE PRECISION array, dimension (LDAF,N)
103               If  FACT  = 'F', then AF is an input argument and on entry con‐
104               tains the factors L and U from the factorization A =  P*L*U  as
105               computed by DGETRF.  If EQUED .ne. 'N', then AF is the factored
106               form of the equilibrated matrix A.  If FACT = 'N', then  AF  is
107               an output argument and on exit returns the factors L and U from
108               the factorization A = P*L*U of the original matrix A.  If  FACT
109               =  'E',  then  AF is an output argument and on exit returns the
110               factors L and U from the factorization A = P*L*U of the equili‐
111               brated  matrix  A (see the description of A for the form of the
112               equilibrated matrix).
113
114       LDAF    (input) INTEGER
115               The leading dimension of the array AF.  LDAF >= max(1,N).
116
117       IPIV    (input or output) INTEGER array, dimension (N)
118               If FACT = 'F', then IPIV is an input argument and on entry con‐
119               tains  the  pivot  indices  from the factorization A = P*L*U as
120               computed by DGETRF; row i of the matrix was  interchanged  with
121               row  IPIV(i).   If  FACT = 'N', then IPIV is an output argument
122               and on exit contains the pivot indices from the factorization A
123               =  P*L*U of the original matrix A.  If FACT = 'E', then IPIV is
124               an output argument and on exit contains the pivot indices  from
125               the factorization A = P*L*U of the equilibrated matrix A.
126
127       EQUED   (input or output) CHARACTER*1
128               Specifies  the form of equilibration that was done.  = 'N':  No
129               equilibration (always true if FACT = 'N').
130               = 'R':  Row equilibration, i.e., A has  been  premultiplied  by
131               diag(R).   = 'C':  Column equilibration, i.e., A has been post‐
132               multiplied by diag(C).  = 'B':  Both row and column  equilibra‐
133               tion,  i.e.,  A  has  been  replaced  by diag(R) * A * diag(C).
134               EQUED is an input argument if FACT = 'F'; otherwise, it  is  an
135               output argument.
136
137       R       (input or output) DOUBLE PRECISION array, dimension (N)
138               The  row scale factors for A.  If EQUED = 'R' or 'B', A is mul‐
139               tiplied on the left by diag(R); if EQUED = 'N' or 'C', R is not
140               accessed.   R  is an input argument if FACT = 'F'; otherwise, R
141               is an output argument.  If FACT = 'F' and EQUED = 'R'  or  'B',
142               each element of R must be positive.
143
144       C       (input or output) DOUBLE PRECISION array, dimension (N)
145               The  column  scale  factors for A.  If EQUED = 'C' or 'B', A is
146               multiplied on the right by diag(C); if EQUED = 'N' or 'R', C is
147               not accessed.  C is an input argument if FACT = 'F'; otherwise,
148               C is an output argument.  If FACT = 'F' and EQUED = 'C' or 'B',
149               each element of C must be positive.
150
151       B       (input/output) DOUBLE PRECISION array, dimension (LDB,NRHS)
152               On  entry, the N-by-NRHS right hand side matrix B.  On exit, if
153               EQUED = 'N', B is not modified; if TRANS = 'N' and EQUED =  'R'
154               or  'B',  B  is overwritten by diag(R)*B; if TRANS = 'T' or 'C'
155               and EQUED = 'C' or 'B', B is overwritten by diag(C)*B.
156
157       LDB     (input) INTEGER
158               The leading dimension of the array B.  LDB >= max(1,N).
159
160       X       (output) DOUBLE PRECISION array, dimension (LDX,NRHS)
161               If INFO = 0 or INFO = N+1, the N-by-NRHS solution matrix  X  to
162               the  original system of equations.  Note that A and B are modi‐
163               fied on exit if EQUED .ne. 'N', and the solution to the equili‐
164               brated  system is inv(diag(C))*X if TRANS = 'N' and EQUED = 'C'
165               or 'B', or inv(diag(R))*X if TRANS = 'T' or 'C' and EQUED = 'R'
166               or 'B'.
167
168       LDX     (input) INTEGER
169               The leading dimension of the array X.  LDX >= max(1,N).
170
171       RCOND   (output) DOUBLE PRECISION
172               The estimate of the reciprocal condition number of the matrix A
173               after equilibration (if done).   If  RCOND  is  less  than  the
174               machine  precision (in particular, if RCOND = 0), the matrix is
175               singular to working precision.  This condition is indicated  by
176               a return code of INFO > 0.
177
178       FERR    (output) DOUBLE PRECISION array, dimension (NRHS)
179               The estimated forward error bound for each solution vector X(j)
180               (the j-th column of the solution matrix X).  If  XTRUE  is  the
181               true  solution  corresponding  to X(j), FERR(j) is an estimated
182               upper bound for the magnitude of the largest element in (X(j) -
183               XTRUE) divided by the magnitude of the largest element in X(j).
184               The estimate is as reliable as the estimate for RCOND,  and  is
185               almost always a slight overestimate of the true error.
186
187       BERR    (output) DOUBLE PRECISION array, dimension (NRHS)
188               The componentwise relative backward error of each solution vec‐
189               tor X(j) (i.e., the smallest relative change in any element  of
190               A or B that makes X(j) an exact solution).
191
192       WORK    (workspace/output) DOUBLE PRECISION array, dimension (4*N)
193               On  exit,  WORK(1)  contains the reciprocal pivot growth factor
194               norm(A)/norm(U). The "max absolute element" norm  is  used.  If
195               WORK(1)  is much less than 1, then the stability of the LU fac‐
196               torization of the (equilibrated) matrix A could be  poor.  This
197               also  means that the solution X, condition estimator RCOND, and
198               forward error bound FERR could be unreliable. If  factorization
199               fails  with  0<INFO<=N,  then  WORK(1)  contains the reciprocal
200               pivot growth factor for the leading INFO columns of A.
201
202       IWORK   (workspace) INTEGER array, dimension (N)
203
204       INFO    (output) INTEGER
205               = 0:  successful exit
206               < 0:  if INFO = -i, the i-th argument had an illegal value
207               > 0:  if INFO = i, and i is
208               <= N:  U(i,i) is exactly zero.  The factorization has been com‐
209               pleted,  but  the factor U is exactly singular, so the solution
210               and error bounds could not be computed. RCOND = 0 is  returned.
211               =  N+1: U is nonsingular, but RCOND is less than machine preci‐
212               sion, meaning that the matrix is singular to working precision.
213               Nevertheless,  the  solution  and  error  bounds  are  computed
214               because there are a number of  situations  where  the  computed
215               solution  can  be  more  accurate than the value of RCOND would
216               suggest.
217
218
219
220 LAPACK driver routine (version 3.N2o)vember 2008                       DGESVX(1)
Impressum