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

NAME

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

SYNOPSIS

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

PURPOSE

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

DESCRIPTION

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

ARGUMENTS

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