LAPACK
3.4.2
LAPACK: Linear Algebra PACKage

Functions/Subroutines  
subroutine  dgels (TRANS, M, N, NRHS, A, LDA, B, LDB, WORK, LWORK, INFO) 
DGELS solves overdetermined or underdetermined systems for GE matrices  
subroutine  dgelsd (M, N, NRHS, A, LDA, B, LDB, S, RCOND, RANK, WORK, LWORK, IWORK, INFO) 
DGELSD computes the minimumnorm solution to a linear least squares problem for GE matrices  
subroutine  dgelss (M, N, NRHS, A, LDA, B, LDB, S, RCOND, RANK, WORK, LWORK, INFO) 
DGELSS solves overdetermined or underdetermined systems for GE matrices  
subroutine  dgelsx (M, N, NRHS, A, LDA, B, LDB, JPVT, RCOND, RANK, WORK, INFO) 
DGELSX solves overdetermined or underdetermined systems for GE matrices  
subroutine  dgelsy (M, N, NRHS, A, LDA, B, LDB, JPVT, RCOND, RANK, WORK, LWORK, INFO) 
DGELSY solves overdetermined or underdetermined systems for GE matrices  
subroutine  dgesv (N, NRHS, A, LDA, IPIV, B, LDB, INFO) 
DGESV computes the solution to system of linear equations A * X = B for GE matrices  
subroutine  dgesvx (FACT, TRANS, N, NRHS, A, LDA, AF, LDAF, IPIV, EQUED, R, C, B, LDB, X, LDX, RCOND, FERR, BERR, WORK, IWORK, INFO) 
DGESVX computes the solution to system of linear equations A * X = B for GE matrices  
subroutine  dgesvxx (FACT, TRANS, N, NRHS, A, LDA, AF, LDAF, IPIV, EQUED, R, C, B, LDB, X, LDX, RCOND, RPVGRW, BERR, N_ERR_BNDS, ERR_BNDS_NORM, ERR_BNDS_COMP, NPARAMS, PARAMS, WORK, IWORK, INFO) 
DGESVXX computes the solution to system of linear equations A * X = B for GE matrices  
subroutine  dsgesv (N, NRHS, A, LDA, IPIV, B, LDB, X, LDX, WORK, SWORK, ITER, INFO) 
DSGESV computes the solution to system of linear equations A * X = B for GE matrices (mixed precision with iterative refinement) 
This is the group of double solve driver functions for GE matrices
subroutine dgels  (  character  TRANS, 
integer  M,  
integer  N,  
integer  NRHS,  
double precision, dimension( lda, * )  A,  
integer  LDA,  
double precision, dimension( ldb, * )  B,  
integer  LDB,  
double precision, dimension( * )  WORK,  
integer  LWORK,  
integer  INFO  
) 
DGELS solves overdetermined or underdetermined systems for GE matrices
Download DGELS + dependencies [TGZ] [ZIP] [TXT]DGELS solves overdetermined or underdetermined real linear systems involving an MbyN matrix A, or its transpose, using a QR or LQ factorization of A. It is assumed that A has full rank. The following options are provided: 1. If TRANS = 'N' and m >= n: find the least squares solution of an overdetermined system, i.e., solve the least squares problem minimize  B  A*X . 2. If TRANS = 'N' and m < n: find the minimum norm solution of an underdetermined system A * X = B. 3. If TRANS = 'T' and m >= n: find the minimum norm solution of an undetermined system A**T * X = B. 4. If TRANS = 'T' and m < n: find the least squares solution of an overdetermined system, i.e., solve the least squares problem minimize  B  A**T * X . Several right hand side vectors b and solution vectors x can be handled in a single call; they are stored as the columns of the MbyNRHS right hand side matrix B and the NbyNRHS solution matrix X.
[in]  TRANS  TRANS is CHARACTER*1 = 'N': the linear system involves A; = 'T': the linear system involves A**T. 
[in]  M  M is INTEGER The number of rows of the matrix A. M >= 0. 
[in]  N  N is INTEGER The number of columns of the matrix A. N >= 0. 
[in]  NRHS  NRHS is INTEGER The number of right hand sides, i.e., the number of columns of the matrices B and X. NRHS >=0. 
[in,out]  A  A is DOUBLE PRECISION array, dimension (LDA,N) On entry, the MbyN matrix A. On exit, if M >= N, A is overwritten by details of its QR factorization as returned by DGEQRF; if M < N, A is overwritten by details of its LQ factorization as returned by DGELQF. 
[in]  LDA  LDA is INTEGER The leading dimension of the array A. LDA >= max(1,M). 
[in,out]  B  B is DOUBLE PRECISION array, dimension (LDB,NRHS) On entry, the matrix B of right hand side vectors, stored columnwise; B is MbyNRHS if TRANS = 'N', or NbyNRHS if TRANS = 'T'. On exit, if INFO = 0, B is overwritten by the solution vectors, stored columnwise: if TRANS = 'N' and m >= n, rows 1 to n of B contain the least squares solution vectors; the residual sum of squares for the solution in each column is given by the sum of squares of elements N+1 to M in that column; if TRANS = 'N' and m < n, rows 1 to N of B contain the minimum norm solution vectors; if TRANS = 'T' and m >= n, rows 1 to M of B contain the minimum norm solution vectors; if TRANS = 'T' and m < n, rows 1 to M of B contain the least squares solution vectors; the residual sum of squares for the solution in each column is given by the sum of squares of elements M+1 to N in that column. 
[in]  LDB  LDB is INTEGER The leading dimension of the array B. LDB >= MAX(1,M,N). 
[out]  WORK  WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK)) On exit, if INFO = 0, WORK(1) returns the optimal LWORK. 
[in]  LWORK  LWORK is INTEGER The dimension of the array WORK. LWORK >= max( 1, MN + max( MN, NRHS ) ). For optimal performance, LWORK >= max( 1, MN + max( MN, NRHS )*NB ). where MN = min(M,N) and NB is the optimum block size. If LWORK = 1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA. 
[out]  INFO  INFO is INTEGER = 0: successful exit < 0: if INFO = i, the ith argument had an illegal value > 0: if INFO = i, the ith diagonal element of the triangular factor of A is zero, so that A does not have full rank; the least squares solution could not be computed. 
Definition at line 183 of file dgels.f.
subroutine dgelsd  (  integer  M, 
integer  N,  
integer  NRHS,  
double precision, dimension( lda, * )  A,  
integer  LDA,  
double precision, dimension( ldb, * )  B,  
integer  LDB,  
double precision, dimension( * )  S,  
double precision  RCOND,  
integer  RANK,  
double precision, dimension( * )  WORK,  
integer  LWORK,  
integer, dimension( * )  IWORK,  
integer  INFO  
) 
DGELSD computes the minimumnorm solution to a linear least squares problem for GE matrices
Download DGELSD + dependencies [TGZ] [ZIP] [TXT]DGELSD computes the minimumnorm solution to a real linear least squares problem: minimize 2norm( b  A*x ) using the singular value decomposition (SVD) of A. A is an MbyN matrix which may be rankdeficient. Several right hand side vectors b and solution vectors x can be handled in a single call; they are stored as the columns of the MbyNRHS right hand side matrix B and the NbyNRHS solution matrix X. The problem is solved in three steps: (1) Reduce the coefficient matrix A to bidiagonal form with Householder transformations, reducing the original problem into a "bidiagonal least squares problem" (BLS) (2) Solve the BLS using a divide and conquer approach. (3) Apply back all the Householder tranformations to solve the original least squares problem. The effective rank of A is determined by treating as zero those singular values which are less than RCOND times the largest singular value. The divide and conquer algorithm makes very mild assumptions about floating point arithmetic. It will work on machines with a guard digit in add/subtract, or on those binary machines without guard digits which subtract like the Cray XMP, Cray YMP, Cray C90, or Cray2. It could conceivably fail on hexadecimal or decimal machines without guard digits, but we know of none.
[in]  M  M is INTEGER The number of rows of A. M >= 0. 
[in]  N  N is INTEGER The number of columns of A. N >= 0. 
[in]  NRHS  NRHS is INTEGER The number of right hand sides, i.e., the number of columns of the matrices B and X. NRHS >= 0. 
[in]  A  A is DOUBLE PRECISION array, dimension (LDA,N) On entry, the MbyN matrix A. On exit, A has been destroyed. 
[in]  LDA  LDA is INTEGER The leading dimension of the array A. LDA >= max(1,M). 
[in,out]  B  B is DOUBLE PRECISION array, dimension (LDB,NRHS) On entry, the MbyNRHS right hand side matrix B. On exit, B is overwritten by the NbyNRHS solution matrix X. If m >= n and RANK = n, the residual sumofsquares for the solution in the ith column is given by the sum of squares of elements n+1:m in that column. 
[in]  LDB  LDB is INTEGER The leading dimension of the array B. LDB >= max(1,max(M,N)). 
[out]  S  S is DOUBLE PRECISION array, dimension (min(M,N)) The singular values of A in decreasing order. The condition number of A in the 2norm = S(1)/S(min(m,n)). 
[in]  RCOND  RCOND is DOUBLE PRECISION RCOND is used to determine the effective rank of A. Singular values S(i) <= RCOND*S(1) are treated as zero. If RCOND < 0, machine precision is used instead. 
[out]  RANK  RANK is INTEGER The effective rank of A, i.e., the number of singular values which are greater than RCOND*S(1). 
[out]  WORK  WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK)) On exit, if INFO = 0, WORK(1) returns the optimal LWORK. 
[in]  LWORK  LWORK is INTEGER The dimension of the array WORK. LWORK must be at least 1. The exact minimum amount of workspace needed depends on M, N and NRHS. As long as LWORK is at least 12*N + 2*N*SMLSIZ + 8*N*NLVL + N*NRHS + (SMLSIZ+1)**2, if M is greater than or equal to N or 12*M + 2*M*SMLSIZ + 8*M*NLVL + M*NRHS + (SMLSIZ+1)**2, if M is less than N, the code will execute correctly. SMLSIZ is returned by ILAENV and is equal to the maximum size of the subproblems at the bottom of the computation tree (usually about 25), and NLVL = MAX( 0, INT( LOG_2( MIN( M,N )/(SMLSIZ+1) ) ) + 1 ) For good performance, LWORK should generally be larger. If LWORK = 1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA. 
[out]  IWORK  IWORK is INTEGER array, dimension (MAX(1,LIWORK)) LIWORK >= max(1, 3 * MINMN * NLVL + 11 * MINMN), where MINMN = MIN( M,N ). On exit, if INFO = 0, IWORK(1) returns the minimum LIWORK. 
[out]  INFO  INFO is INTEGER = 0: successful exit < 0: if INFO = i, the ith argument had an illegal value. > 0: the algorithm for computing the SVD failed to converge; if INFO = i, i offdiagonal elements of an intermediate bidiagonal form did not converge to zero. 
Definition at line 209 of file dgelsd.f.
subroutine dgelss  (  integer  M, 
integer  N,  
integer  NRHS,  
double precision, dimension( lda, * )  A,  
integer  LDA,  
double precision, dimension( ldb, * )  B,  
integer  LDB,  
double precision, dimension( * )  S,  
double precision  RCOND,  
integer  RANK,  
double precision, dimension( * )  WORK,  
integer  LWORK,  
integer  INFO  
) 
DGELSS solves overdetermined or underdetermined systems for GE matrices
Download DGELSS + dependencies [TGZ] [ZIP] [TXT]DGELSS computes the minimum norm solution to a real linear least squares problem: Minimize 2norm( b  A*x ). using the singular value decomposition (SVD) of A. A is an MbyN matrix which may be rankdeficient. Several right hand side vectors b and solution vectors x can be handled in a single call; they are stored as the columns of the MbyNRHS right hand side matrix B and the NbyNRHS solution matrix X. The effective rank of A is determined by treating as zero those singular values which are less than RCOND times the largest singular value.
[in]  M  M is INTEGER The number of rows of the matrix A. M >= 0. 
[in]  N  N is INTEGER The number of columns of the matrix A. N >= 0. 
[in]  NRHS  NRHS is INTEGER The number of right hand sides, i.e., the number of columns of the matrices B and X. NRHS >= 0. 
[in,out]  A  A is DOUBLE PRECISION array, dimension (LDA,N) On entry, the MbyN matrix A. On exit, the first min(m,n) rows of A are overwritten with its right singular vectors, stored rowwise. 
[in]  LDA  LDA is INTEGER The leading dimension of the array A. LDA >= max(1,M). 
[in,out]  B  B is DOUBLE PRECISION array, dimension (LDB,NRHS) On entry, the MbyNRHS right hand side matrix B. On exit, B is overwritten by the NbyNRHS solution matrix X. If m >= n and RANK = n, the residual sumofsquares for the solution in the ith column is given by the sum of squares of elements n+1:m in that column. 
[in]  LDB  LDB is INTEGER The leading dimension of the array B. LDB >= max(1,max(M,N)). 
[out]  S  S is DOUBLE PRECISION array, dimension (min(M,N)) The singular values of A in decreasing order. The condition number of A in the 2norm = S(1)/S(min(m,n)). 
[in]  RCOND  RCOND is DOUBLE PRECISION RCOND is used to determine the effective rank of A. Singular values S(i) <= RCOND*S(1) are treated as zero. If RCOND < 0, machine precision is used instead. 
[out]  RANK  RANK is INTEGER The effective rank of A, i.e., the number of singular values which are greater than RCOND*S(1). 
[out]  WORK  WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK)) On exit, if INFO = 0, WORK(1) returns the optimal LWORK. 
[in]  LWORK  LWORK is INTEGER The dimension of the array WORK. LWORK >= 1, and also: LWORK >= 3*min(M,N) + max( 2*min(M,N), max(M,N), NRHS ) For good performance, LWORK should generally be larger. If LWORK = 1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA. 
[out]  INFO  INFO is INTEGER = 0: successful exit < 0: if INFO = i, the ith argument had an illegal value. > 0: the algorithm for computing the SVD failed to converge; if INFO = i, i offdiagonal elements of an intermediate bidiagonal form did not converge to zero. 
Definition at line 172 of file dgelss.f.
subroutine dgelsx  (  integer  M, 
integer  N,  
integer  NRHS,  
double precision, dimension( lda, * )  A,  
integer  LDA,  
double precision, dimension( ldb, * )  B,  
integer  LDB,  
integer, dimension( * )  JPVT,  
double precision  RCOND,  
integer  RANK,  
double precision, dimension( * )  WORK,  
integer  INFO  
) 
DGELSX solves overdetermined or underdetermined systems for GE matrices
Download DGELSX + dependencies [TGZ] [ZIP] [TXT]This routine is deprecated and has been replaced by routine DGELSY. DGELSX computes the minimumnorm solution to a real linear least squares problem: minimize  A * X  B  using a complete orthogonal factorization of A. A is an MbyN matrix which may be rankdeficient. Several right hand side vectors b and solution vectors x can be handled in a single call; they are stored as the columns of the MbyNRHS right hand side matrix B and the NbyNRHS solution matrix X. The routine first computes a QR factorization with column pivoting: A * P = Q * [ R11 R12 ] [ 0 R22 ] with R11 defined as the largest leading submatrix whose estimated condition number is less than 1/RCOND. The order of R11, RANK, is the effective rank of A. Then, R22 is considered to be negligible, and R12 is annihilated by orthogonal transformations from the right, arriving at the complete orthogonal factorization: A * P = Q * [ T11 0 ] * Z [ 0 0 ] The minimumnorm solution is then X = P * Z**T [ inv(T11)*Q1**T*B ] [ 0 ] where Q1 consists of the first RANK columns of Q.
[in]  M  M is INTEGER The number of rows of the matrix A. M >= 0. 
[in]  N  N is INTEGER The number of columns of the matrix A. N >= 0. 
[in]  NRHS  NRHS is INTEGER The number of right hand sides, i.e., the number of columns of matrices B and X. NRHS >= 0. 
[in,out]  A  A is DOUBLE PRECISION array, dimension (LDA,N) On entry, the MbyN matrix A. On exit, A has been overwritten by details of its complete orthogonal factorization. 
[in]  LDA  LDA is INTEGER The leading dimension of the array A. LDA >= max(1,M). 
[in,out]  B  B is DOUBLE PRECISION array, dimension (LDB,NRHS) On entry, the MbyNRHS right hand side matrix B. On exit, the NbyNRHS solution matrix X. If m >= n and RANK = n, the residual sumofsquares for the solution in the ith column is given by the sum of squares of elements N+1:M in that column. 
[in]  LDB  LDB is INTEGER The leading dimension of the array B. LDB >= max(1,M,N). 
[in,out]  JPVT  JPVT is INTEGER array, dimension (N) On entry, if JPVT(i) .ne. 0, the ith column of A is an initial column, otherwise it is a free column. Before the QR factorization of A, all initial columns are permuted to the leading positions; only the remaining free columns are moved as a result of column pivoting during the factorization. On exit, if JPVT(i) = k, then the ith column of A*P was the kth column of A. 
[in]  RCOND  RCOND is DOUBLE PRECISION RCOND is used to determine the effective rank of A, which is defined as the order of the largest leading triangular submatrix R11 in the QR factorization with pivoting of A, whose estimated condition number < 1/RCOND. 
[out]  RANK  RANK is INTEGER The effective rank of A, i.e., the order of the submatrix R11. This is the same as the order of the submatrix T11 in the complete orthogonal factorization of A. 
[out]  WORK  WORK is DOUBLE PRECISION array, dimension (max( min(M,N)+3*N, 2*min(M,N)+NRHS )), 
[out]  INFO  INFO is INTEGER = 0: successful exit < 0: if INFO = i, the ith argument had an illegal value 
Definition at line 178 of file dgelsx.f.
subroutine dgelsy  (  integer  M, 
integer  N,  
integer  NRHS,  
double precision, dimension( lda, * )  A,  
integer  LDA,  
double precision, dimension( ldb, * )  B,  
integer  LDB,  
integer, dimension( * )  JPVT,  
double precision  RCOND,  
integer  RANK,  
double precision, dimension( * )  WORK,  
integer  LWORK,  
integer  INFO  
) 
DGELSY solves overdetermined or underdetermined systems for GE matrices
Download DGELSY + dependencies [TGZ] [ZIP] [TXT]DGELSY computes the minimumnorm solution to a real linear least squares problem: minimize  A * X  B  using a complete orthogonal factorization of A. A is an MbyN matrix which may be rankdeficient. Several right hand side vectors b and solution vectors x can be handled in a single call; they are stored as the columns of the MbyNRHS right hand side matrix B and the NbyNRHS solution matrix X. The routine first computes a QR factorization with column pivoting: A * P = Q * [ R11 R12 ] [ 0 R22 ] with R11 defined as the largest leading submatrix whose estimated condition number is less than 1/RCOND. The order of R11, RANK, is the effective rank of A. Then, R22 is considered to be negligible, and R12 is annihilated by orthogonal transformations from the right, arriving at the complete orthogonal factorization: A * P = Q * [ T11 0 ] * Z [ 0 0 ] The minimumnorm solution is then X = P * Z**T [ inv(T11)*Q1**T*B ] [ 0 ] where Q1 consists of the first RANK columns of Q. This routine is basically identical to the original xGELSX except three differences: o The call to the subroutine xGEQPF has been substituted by the the call to the subroutine xGEQP3. This subroutine is a Blas3 version of the QR factorization with column pivoting. o Matrix B (the right hand side) is updated with Blas3. o The permutation of matrix B (the right hand side) is faster and more simple.
[in]  M  M is INTEGER The number of rows of the matrix A. M >= 0. 
[in]  N  N is INTEGER The number of columns of the matrix A. N >= 0. 
[in]  NRHS  NRHS is INTEGER The number of right hand sides, i.e., the number of columns of matrices B and X. NRHS >= 0. 
[in,out]  A  A is DOUBLE PRECISION array, dimension (LDA,N) On entry, the MbyN matrix A. On exit, A has been overwritten by details of its complete orthogonal factorization. 
[in]  LDA  LDA is INTEGER The leading dimension of the array A. LDA >= max(1,M). 
[in,out]  B  B is DOUBLE PRECISION array, dimension (LDB,NRHS) On entry, the MbyNRHS right hand side matrix B. On exit, the NbyNRHS solution matrix X. 
[in]  LDB  LDB is INTEGER The leading dimension of the array B. LDB >= max(1,M,N). 
[in,out]  JPVT  JPVT is INTEGER array, dimension (N) On entry, if JPVT(i) .ne. 0, the ith column of A is permuted to the front of AP, otherwise column i is a free column. On exit, if JPVT(i) = k, then the ith column of AP was the kth column of A. 
[in]  RCOND  RCOND is DOUBLE PRECISION RCOND is used to determine the effective rank of A, which is defined as the order of the largest leading triangular submatrix R11 in the QR factorization with pivoting of A, whose estimated condition number < 1/RCOND. 
[out]  RANK  RANK is INTEGER The effective rank of A, i.e., the order of the submatrix R11. This is the same as the order of the submatrix T11 in the complete orthogonal factorization of A. 
[out]  WORK  WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK)) On exit, if INFO = 0, WORK(1) returns the optimal LWORK. 
[in]  LWORK  LWORK is INTEGER The dimension of the array WORK. The unblocked strategy requires that: LWORK >= MAX( MN+3*N+1, 2*MN+NRHS ), where MN = min( M, N ). The block algorithm requires that: LWORK >= MAX( MN+2*N+NB*(N+1), 2*MN+NB*NRHS ), where NB is an upper bound on the blocksize returned by ILAENV for the routines DGEQP3, DTZRZF, STZRQF, DORMQR, and DORMRZ. If LWORK = 1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA. 
[out]  INFO  INFO is INTEGER = 0: successful exit < 0: If INFO = i, the ith argument had an illegal value. 
Definition at line 204 of file dgelsy.f.
subroutine dgesv  (  integer  N, 
integer  NRHS,  
double precision, dimension( lda, * )  A,  
integer  LDA,  
integer, dimension( * )  IPIV,  
double precision, dimension( ldb, * )  B,  
integer  LDB,  
integer  INFO  
) 
DGESV computes the solution to system of linear equations A * X = B for GE matrices
Download DGESV + dependencies [TGZ] [ZIP] [TXT]DGESV computes the solution to a real system of linear equations A * X = B, where A is an NbyN matrix and X and B are NbyNRHS matrices. The LU decomposition with partial pivoting and row interchanges is used to factor A as A = P * L * U, where P is a permutation matrix, L is unit lower triangular, and U is upper triangular. The factored form of A is then used to solve the system of equations A * X = B.
[in]  N  N is INTEGER The number of linear equations, i.e., the order of the matrix A. N >= 0. 
[in]  NRHS  NRHS is INTEGER The number of right hand sides, i.e., the number of columns of the matrix B. NRHS >= 0. 
[in,out]  A  A is DOUBLE PRECISION array, dimension (LDA,N) On entry, the NbyN coefficient matrix A. On exit, the factors L and U from the factorization A = P*L*U; the unit diagonal elements of L are not stored. 
[in]  LDA  LDA is INTEGER The leading dimension of the array A. LDA >= max(1,N). 
[out]  IPIV  IPIV is INTEGER array, dimension (N) The pivot indices that define the permutation matrix P; row i of the matrix was interchanged with row IPIV(i). 
[in,out]  B  B is DOUBLE PRECISION array, dimension (LDB,NRHS) On entry, the NbyNRHS matrix of right hand side matrix B. On exit, if INFO = 0, the NbyNRHS solution matrix X. 
[in]  LDB  LDB is INTEGER The leading dimension of the array B. LDB >= max(1,N). 
[out]  INFO  INFO is INTEGER = 0: successful exit < 0: if INFO = i, the ith argument had an illegal value > 0: if INFO = i, U(i,i) is exactly zero. The factorization has been completed, but the factor U is exactly singular, so the solution could not be computed. 
Definition at line 123 of file dgesv.f.
subroutine dgesvx  (  character  FACT, 
character  TRANS,  
integer  N,  
integer  NRHS,  
double precision, dimension( lda, * )  A,  
integer  LDA,  
double precision, dimension( ldaf, * )  AF,  
integer  LDAF,  
integer, dimension( * )  IPIV,  
character  EQUED,  
double precision, dimension( * )  R,  
double precision, dimension( * )  C,  
double precision, dimension( ldb, * )  B,  
integer  LDB,  
double precision, dimension( ldx, * )  X,  
integer  LDX,  
double precision  RCOND,  
double precision, dimension( * )  FERR,  
double precision, dimension( * )  BERR,  
double precision, dimension( * )  WORK,  
integer, dimension( * )  IWORK,  
integer  INFO  
) 
DGESVX computes the solution to system of linear equations A * X = B for GE matrices
Download DGESVX + dependencies [TGZ] [ZIP] [TXT]DGESVX uses the LU factorization to compute the solution to a real system of linear equations A * X = B, where A is an NbyN matrix and X and B are NbyNRHS matrices. Error bounds on the solution and a condition estimate are also provided.
The following steps are performed: 1. If FACT = 'E', real scaling factors are computed to equilibrate the system: TRANS = 'N': diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B TRANS = 'T': (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B TRANS = 'C': (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B Whether or not the system will be equilibrated depends on the scaling of the matrix A, but if equilibration is used, A is overwritten by diag(R)*A*diag(C) and B by diag(R)*B (if TRANS='N') or diag(C)*B (if TRANS = 'T' or 'C'). 2. If FACT = 'N' or 'E', the LU decomposition is used to factor the matrix A (after equilibration if FACT = 'E') as A = P * L * U, where P is a permutation matrix, L is a unit lower triangular matrix, and U is upper triangular. 3. If some U(i,i)=0, so that U is exactly singular, then the routine returns with INFO = i. Otherwise, the factored form of A is used to estimate the condition number of the matrix A. If the reciprocal of the condition number is less than machine precision, INFO = N+1 is returned as a warning, but the routine still goes on to solve for X and compute error bounds as described below. 4. The system of equations is solved for X using the factored form of A. 5. Iterative refinement is applied to improve the computed solution matrix and calculate error bounds and backward error estimates for it. 6. If equilibration was used, the matrix X is premultiplied by diag(C) (if TRANS = 'N') or diag(R) (if TRANS = 'T' or 'C') so that it solves the original system before equilibration.
[in]  FACT  FACT is CHARACTER*1 Specifies whether or not the factored form of the matrix A is supplied on entry, and if not, whether the matrix A should be equilibrated before it is factored. = 'F': On entry, AF and IPIV contain the factored form of A. If EQUED is not 'N', the matrix A has been equilibrated with scaling factors given by R and C. A, AF, and IPIV are not modified. = 'N': The matrix A will be copied to AF and factored. = 'E': The matrix A will be equilibrated if necessary, then copied to AF and factored. 
[in]  TRANS  TRANS is CHARACTER*1 Specifies the form of the system of equations: = 'N': A * X = B (No transpose) = 'T': A**T * X = B (Transpose) = 'C': A**H * X = B (Transpose) 
[in]  N  N is INTEGER The number of linear equations, i.e., the order of the matrix A. N >= 0. 
[in]  NRHS  NRHS is INTEGER The number of right hand sides, i.e., the number of columns of the matrices B and X. NRHS >= 0. 
[in,out]  A  A is DOUBLE PRECISION array, dimension (LDA,N) On entry, the NbyN matrix A. If FACT = 'F' and EQUED is not 'N', then A must have been equilibrated by the scaling factors in R and/or C. A is not modified if FACT = 'F' or 'N', or if FACT = 'E' and EQUED = 'N' on exit. On exit, if EQUED .ne. 'N', A is scaled as follows: EQUED = 'R': A := diag(R) * A EQUED = 'C': A := A * diag(C) EQUED = 'B': A := diag(R) * A * diag(C). 
[in]  LDA  LDA is INTEGER The leading dimension of the array A. LDA >= max(1,N). 
[in,out]  AF  AF is DOUBLE PRECISION array, dimension (LDAF,N) If FACT = 'F', then AF is an input argument and on entry contains the factors L and U from the factorization A = P*L*U as computed by DGETRF. If EQUED .ne. 'N', then AF is the factored form of the equilibrated matrix A. If FACT = 'N', then AF is an output argument and on exit returns the factors L and U from the factorization A = P*L*U of the original matrix A. If FACT = 'E', then AF is an output argument and on exit returns the factors L and U from the factorization A = P*L*U of the equilibrated matrix A (see the description of A for the form of the equilibrated matrix). 
[in]  LDAF  LDAF is INTEGER The leading dimension of the array AF. LDAF >= max(1,N). 
[in,out]  IPIV  IPIV is INTEGER array, dimension (N) If FACT = 'F', then IPIV is an input argument and on entry contains the pivot indices from the factorization A = P*L*U as computed by DGETRF; row i of the matrix was interchanged with row IPIV(i). If FACT = 'N', then IPIV is an output argument and on exit contains the pivot indices from the factorization A = P*L*U of the original matrix A. If FACT = 'E', then IPIV is an output argument and on exit contains the pivot indices from the factorization A = P*L*U of the equilibrated matrix A. 
[in,out]  EQUED  EQUED is CHARACTER*1 Specifies the form of equilibration that was done. = 'N': No equilibration (always true if FACT = 'N'). = 'R': Row equilibration, i.e., A has been premultiplied by diag(R). = 'C': Column equilibration, i.e., A has been postmultiplied by diag(C). = 'B': Both row and column equilibration, i.e., A has been replaced by diag(R) * A * diag(C). EQUED is an input argument if FACT = 'F'; otherwise, it is an output argument. 
[in,out]  R  R is DOUBLE PRECISION array, dimension (N) The row scale factors for A. If EQUED = 'R' or 'B', A is multiplied on the left by diag(R); if EQUED = 'N' or 'C', R is not accessed. R is an input argument if FACT = 'F'; otherwise, R is an output argument. If FACT = 'F' and EQUED = 'R' or 'B', each element of R must be positive. 
[in,out]  C  C is DOUBLE PRECISION array, dimension (N) The column scale factors for A. If EQUED = 'C' or 'B', A is multiplied on the right by diag(C); if EQUED = 'N' or 'R', C is not accessed. C is an input argument if FACT = 'F'; otherwise, C is an output argument. If FACT = 'F' and EQUED = 'C' or 'B', each element of C must be positive. 
[in,out]  B  B is DOUBLE PRECISION array, dimension (LDB,NRHS) On entry, the NbyNRHS right hand side matrix B. On exit, if EQUED = 'N', B is not modified; if TRANS = 'N' and EQUED = 'R' or 'B', B is overwritten by diag(R)*B; if TRANS = 'T' or 'C' and EQUED = 'C' or 'B', B is overwritten by diag(C)*B. 
[in]  LDB  LDB is INTEGER The leading dimension of the array B. LDB >= max(1,N). 
[out]  X  X is DOUBLE PRECISION array, dimension (LDX,NRHS) If INFO = 0 or INFO = N+1, the NbyNRHS solution matrix X to the original system of equations. Note that A and B are modified on exit if EQUED .ne. 'N', and the solution to the equilibrated system is inv(diag(C))*X if TRANS = 'N' and EQUED = 'C' or 'B', or inv(diag(R))*X if TRANS = 'T' or 'C' and EQUED = 'R' or 'B'. 
[in]  LDX  LDX is INTEGER The leading dimension of the array X. LDX >= max(1,N). 
[out]  RCOND  RCOND is DOUBLE PRECISION The estimate of the reciprocal condition number of the matrix A after equilibration (if done). If RCOND is less than the machine precision (in particular, if RCOND = 0), the matrix is singular to working precision. This condition is indicated by a return code of INFO > 0. 
[out]  FERR  FERR is DOUBLE PRECISION array, dimension (NRHS) The estimated forward error bound for each solution vector X(j) (the jth column of the solution matrix X). If XTRUE is the true solution corresponding to X(j), FERR(j) is an estimated upper bound for the magnitude of the largest element in (X(j)  XTRUE) divided by the magnitude of the largest element in X(j). The estimate is as reliable as the estimate for RCOND, and is almost always a slight overestimate of the true error. 
[out]  BERR  BERR is DOUBLE PRECISION array, dimension (NRHS) The componentwise relative backward error of each solution vector X(j) (i.e., the smallest relative change in any element of A or B that makes X(j) an exact solution). 
[out]  WORK  WORK is DOUBLE PRECISION array, dimension (4*N) On exit, WORK(1) contains the reciprocal pivot growth factor norm(A)/norm(U). The "max absolute element" norm is used. If WORK(1) is much less than 1, then the stability of the LU factorization of the (equilibrated) matrix A could be poor. This also means that the solution X, condition estimator RCOND, and forward error bound FERR could be unreliable. If factorization fails with 0<INFO<=N, then WORK(1) contains the reciprocal pivot growth factor for the leading INFO columns of A. 
[out]  IWORK  IWORK is INTEGER array, dimension (N) 
[out]  INFO  INFO is INTEGER = 0: successful exit < 0: if INFO = i, the ith argument had an illegal value > 0: if INFO = i, and i is <= N: U(i,i) is exactly zero. The factorization has been completed, but the factor U is exactly singular, so the solution and error bounds could not be computed. RCOND = 0 is returned. = N+1: U is nonsingular, but RCOND is less than machine precision, meaning that the matrix is singular to working precision. Nevertheless, the solution and error bounds are computed because there are a number of situations where the computed solution can be more accurate than the value of RCOND would suggest. 
Definition at line 348 of file dgesvx.f.
subroutine dgesvxx  (  character  FACT, 
character  TRANS,  
integer  N,  
integer  NRHS,  
double precision, dimension( lda, * )  A,  
integer  LDA,  
double precision, dimension( ldaf, * )  AF,  
integer  LDAF,  
integer, dimension( * )  IPIV,  
character  EQUED,  
double precision, dimension( * )  R,  
double precision, dimension( * )  C,  
double precision, dimension( ldb, * )  B,  
integer  LDB,  
double precision, dimension( ldx , * )  X,  
integer  LDX,  
double precision  RCOND,  
double precision  RPVGRW,  
double precision, dimension( * )  BERR,  
integer  N_ERR_BNDS,  
double precision, dimension( nrhs, * )  ERR_BNDS_NORM,  
double precision, dimension( nrhs, * )  ERR_BNDS_COMP,  
integer  NPARAMS,  
double precision, dimension( * )  PARAMS,  
double precision, dimension( * )  WORK,  
integer, dimension( * )  IWORK,  
integer  INFO  
) 
DGESVXX computes the solution to system of linear equations A * X = B for GE matrices
Download DGESVXX + dependencies [TGZ] [ZIP] [TXT]DGESVXX uses the LU factorization to compute the solution to a double precision system of linear equations A * X = B, where A is an NbyN matrix and X and B are NbyNRHS matrices. If requested, both normwise and maximum componentwise error bounds are returned. DGESVXX will return a solution with a tiny guaranteed error (O(eps) where eps is the working machine precision) unless the matrix is very illconditioned, in which case a warning is returned. Relevant condition numbers also are calculated and returned. DGESVXX accepts userprovided factorizations and equilibration factors; see the definitions of the FACT and EQUED options. Solving with refinement and using a factorization from a previous DGESVXX call will also produce a solution with either O(eps) errors or warnings, but we cannot make that claim for general userprovided factorizations and equilibration factors if they differ from what DGESVXX would itself produce.
The following steps are performed: 1. If FACT = 'E', double precision scaling factors are computed to equilibrate the system: TRANS = 'N': diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B TRANS = 'T': (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B TRANS = 'C': (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B Whether or not the system will be equilibrated depends on the scaling of the matrix A, but if equilibration is used, A is overwritten by diag(R)*A*diag(C) and B by diag(R)*B (if TRANS='N') or diag(C)*B (if TRANS = 'T' or 'C'). 2. If FACT = 'N' or 'E', the LU decomposition is used to factor the matrix A (after equilibration if FACT = 'E') as A = P * L * U, where P is a permutation matrix, L is a unit lower triangular matrix, and U is upper triangular. 3. If some U(i,i)=0, so that U is exactly singular, then the routine returns with INFO = i. Otherwise, the factored form of A is used to estimate the condition number of the matrix A (see argument RCOND). If the reciprocal of the condition number is less than machine precision, the routine still goes on to solve for X and compute error bounds as described below. 4. The system of equations is solved for X using the factored form of A. 5. By default (unless PARAMS(LA_LINRX_ITREF_I) is set to zero), the routine will use iterative refinement to try to get a small error and error bounds. Refinement calculates the residual to at least twice the working precision. 6. If equilibration was used, the matrix X is premultiplied by diag(C) (if TRANS = 'N') or diag(R) (if TRANS = 'T' or 'C') so that it solves the original system before equilibration.
Some optional parameters are bundled in the PARAMS array. These settings determine how refinement is performed, but often the defaults are acceptable. If the defaults are acceptable, users can pass NPARAMS = 0 which prevents the source code from accessing the PARAMS argument.
[in]  FACT  FACT is CHARACTER*1 Specifies whether or not the factored form of the matrix A is supplied on entry, and if not, whether the matrix A should be equilibrated before it is factored. = 'F': On entry, AF and IPIV contain the factored form of A. If EQUED is not 'N', the matrix A has been equilibrated with scaling factors given by R and C. A, AF, and IPIV are not modified. = 'N': The matrix A will be copied to AF and factored. = 'E': The matrix A will be equilibrated if necessary, then copied to AF and factored. 
[in]  TRANS  TRANS is CHARACTER*1 Specifies the form of the system of equations: = 'N': A * X = B (No transpose) = 'T': A**T * X = B (Transpose) = 'C': A**H * X = B (Conjugate Transpose = Transpose) 
[in]  N  N is INTEGER The number of linear equations, i.e., the order of the matrix A. N >= 0. 
[in]  NRHS  NRHS is INTEGER The number of right hand sides, i.e., the number of columns of the matrices B and X. NRHS >= 0. 
[in,out]  A  A is DOUBLE PRECISION array, dimension (LDA,N) On entry, the NbyN matrix A. If FACT = 'F' and EQUED is not 'N', then A must have been equilibrated by the scaling factors in R and/or C. A is not modified if FACT = 'F' or 'N', or if FACT = 'E' and EQUED = 'N' on exit. On exit, if EQUED .ne. 'N', A is scaled as follows: EQUED = 'R': A := diag(R) * A EQUED = 'C': A := A * diag(C) EQUED = 'B': A := diag(R) * A * diag(C). 
[in]  LDA  LDA is INTEGER The leading dimension of the array A. LDA >= max(1,N). 
[in,out]  AF  AF is DOUBLE PRECISION array, dimension (LDAF,N) If FACT = 'F', then AF is an input argument and on entry contains the factors L and U from the factorization A = P*L*U as computed by DGETRF. If EQUED .ne. 'N', then AF is the factored form of the equilibrated matrix A. If FACT = 'N', then AF is an output argument and on exit returns the factors L and U from the factorization A = P*L*U of the original matrix A. If FACT = 'E', then AF is an output argument and on exit returns the factors L and U from the factorization A = P*L*U of the equilibrated matrix A (see the description of A for the form of the equilibrated matrix). 
[in]  LDAF  LDAF is INTEGER The leading dimension of the array AF. LDAF >= max(1,N). 
[in,out]  IPIV  IPIV is INTEGER array, dimension (N) If FACT = 'F', then IPIV is an input argument and on entry contains the pivot indices from the factorization A = P*L*U as computed by DGETRF; row i of the matrix was interchanged with row IPIV(i). If FACT = 'N', then IPIV is an output argument and on exit contains the pivot indices from the factorization A = P*L*U of the original matrix A. If FACT = 'E', then IPIV is an output argument and on exit contains the pivot indices from the factorization A = P*L*U of the equilibrated matrix A. 
[in,out]  EQUED  EQUED is CHARACTER*1 Specifies the form of equilibration that was done. = 'N': No equilibration (always true if FACT = 'N'). = 'R': Row equilibration, i.e., A has been premultiplied by diag(R). = 'C': Column equilibration, i.e., A has been postmultiplied by diag(C). = 'B': Both row and column equilibration, i.e., A has been replaced by diag(R) * A * diag(C). EQUED is an input argument if FACT = 'F'; otherwise, it is an output argument. 
[in,out]  R  R is DOUBLE PRECISION array, dimension (N) The row scale factors for A. If EQUED = 'R' or 'B', A is multiplied on the left by diag(R); if EQUED = 'N' or 'C', R is not accessed. R is an input argument if FACT = 'F'; otherwise, R is an output argument. If FACT = 'F' and EQUED = 'R' or 'B', each element of R must be positive. If R is output, each element of R is a power of the radix. If R is input, each element of R should be a power of the radix to ensure a reliable solution and error estimates. Scaling by powers of the radix does not cause rounding errors unless the result underflows or overflows. Rounding errors during scaling lead to refining with a matrix that is not equivalent to the input matrix, producing error estimates that may not be reliable. 
[in,out]  C  C is DOUBLE PRECISION array, dimension (N) The column scale factors for A. If EQUED = 'C' or 'B', A is multiplied on the right by diag(C); if EQUED = 'N' or 'R', C is not accessed. C is an input argument if FACT = 'F'; otherwise, C is an output argument. If FACT = 'F' and EQUED = 'C' or 'B', each element of C must be positive. If C is output, each element of C is a power of the radix. If C is input, each element of C should be a power of the radix to ensure a reliable solution and error estimates. Scaling by powers of the radix does not cause rounding errors unless the result underflows or overflows. Rounding errors during scaling lead to refining with a matrix that is not equivalent to the input matrix, producing error estimates that may not be reliable. 
[in,out]  B  B is DOUBLE PRECISION array, dimension (LDB,NRHS) On entry, the NbyNRHS right hand side matrix B. On exit, if EQUED = 'N', B is not modified; if TRANS = 'N' and EQUED = 'R' or 'B', B is overwritten by diag(R)*B; if TRANS = 'T' or 'C' and EQUED = 'C' or 'B', B is overwritten by diag(C)*B. 
[in]  LDB  LDB is INTEGER The leading dimension of the array B. LDB >= max(1,N). 
[out]  X  X is DOUBLE PRECISION array, dimension (LDX,NRHS) If INFO = 0, the NbyNRHS solution matrix X to the original system of equations. Note that A and B are modified on exit if EQUED .ne. 'N', and the solution to the equilibrated system is inv(diag(C))*X if TRANS = 'N' and EQUED = 'C' or 'B', or inv(diag(R))*X if TRANS = 'T' or 'C' and EQUED = 'R' or 'B'. 
[in]  LDX  LDX is INTEGER The leading dimension of the array X. LDX >= max(1,N). 
[out]  RCOND  RCOND is DOUBLE PRECISION Reciprocal scaled condition number. This is an estimate of the reciprocal Skeel condition number of the matrix A after equilibration (if done). If this is less than the machine precision (in particular, if it is zero), the matrix is singular to working precision. Note that the error may still be small even if this number is very small and the matrix appears ill conditioned. 
[out]  RPVGRW  RPVGRW is DOUBLE PRECISION Reciprocal pivot growth. On exit, this contains the reciprocal pivot growth factor norm(A)/norm(U). The "max absolute element" norm is used. If this is much less than 1, then the stability of the LU factorization of the (equilibrated) matrix A could be poor. This also means that the solution X, estimated condition numbers, and error bounds could be unreliable. If factorization fails with 0<INFO<=N, then this contains the reciprocal pivot growth factor for the leading INFO columns of A. In DGESVX, this quantity is returned in WORK(1). 
[out]  BERR  BERR is DOUBLE PRECISION array, dimension (NRHS) Componentwise relative backward error. This is the componentwise relative backward error of each solution vector X(j) (i.e., the smallest relative change in any element of A or B that makes X(j) an exact solution). 
[in]  N_ERR_BNDS  N_ERR_BNDS is INTEGER Number of error bounds to return for each right hand side and each type (normwise or componentwise). See ERR_BNDS_NORM and ERR_BNDS_COMP below. 
[out]  ERR_BNDS_NORM  ERR_BNDS_NORM is DOUBLE PRECISION array, dimension (NRHS, N_ERR_BNDS) For each righthand side, this array contains information about various error bounds and condition numbers corresponding to the normwise relative error, which is defined as follows: Normwise relative error in the ith solution vector: max_j (abs(XTRUE(j,i)  X(j,i)))  max_j abs(X(j,i)) The array is indexed by the type of error information as described below. There currently are up to three pieces of information returned. The first index in ERR_BNDS_NORM(i,:) corresponds to the ith righthand side. The second index in ERR_BNDS_NORM(:,err) contains the following three fields: err = 1 "Trust/don't trust" boolean. Trust the answer if the reciprocal condition number is less than the threshold sqrt(n) * dlamch('Epsilon'). err = 2 "Guaranteed" error bound: The estimated forward error, almost certainly within a factor of 10 of the true error so long as the next entry is greater than the threshold sqrt(n) * dlamch('Epsilon'). This error bound should only be trusted if the previous boolean is true. err = 3 Reciprocal condition number: Estimated normwise reciprocal condition number. Compared with the threshold sqrt(n) * dlamch('Epsilon') to determine if the error estimate is "guaranteed". These reciprocal condition numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some appropriately scaled matrix Z. Let Z = S*A, where S scales each row by a power of the radix so all absolute row sums of Z are approximately 1. See Lapack Working Note 165 for further details and extra cautions. 
[out]  ERR_BNDS_COMP  ERR_BNDS_COMP is DOUBLE PRECISION array, dimension (NRHS, N_ERR_BNDS) For each righthand side, this array contains information about various error bounds and condition numbers corresponding to the componentwise relative error, which is defined as follows: Componentwise relative error in the ith solution vector: abs(XTRUE(j,i)  X(j,i)) max_j  abs(X(j,i)) The array is indexed by the righthand side i (on which the componentwise relative error depends), and the type of error information as described below. There currently are up to three pieces of information returned for each righthand side. If componentwise accuracy is not requested (PARAMS(3) = 0.0), then ERR_BNDS_COMP is not accessed. If N_ERR_BNDS .LT. 3, then at most the first (:,N_ERR_BNDS) entries are returned. The first index in ERR_BNDS_COMP(i,:) corresponds to the ith righthand side. The second index in ERR_BNDS_COMP(:,err) contains the following three fields: err = 1 "Trust/don't trust" boolean. Trust the answer if the reciprocal condition number is less than the threshold sqrt(n) * dlamch('Epsilon'). err = 2 "Guaranteed" error bound: The estimated forward error, almost certainly within a factor of 10 of the true error so long as the next entry is greater than the threshold sqrt(n) * dlamch('Epsilon'). This error bound should only be trusted if the previous boolean is true. err = 3 Reciprocal condition number: Estimated componentwise reciprocal condition number. Compared with the threshold sqrt(n) * dlamch('Epsilon') to determine if the error estimate is "guaranteed". These reciprocal condition numbers are 1 / (norm(Z^{1},inf) * norm(Z,inf)) for some appropriately scaled matrix Z. Let Z = S*(A*diag(x)), where x is the solution for the current righthand side and S scales each row of A*diag(x) by a power of the radix so all absolute row sums of Z are approximately 1. See Lapack Working Note 165 for further details and extra cautions. 
[in]  NPARAMS  NPARAMS is INTEGER Specifies the number of parameters set in PARAMS. If .LE. 0, the PARAMS array is never referenced and default values are used. 
[in,out]  PARAMS  PARAMS is DOUBLE PRECISION array, dimension (NPARAMS) Specifies algorithm parameters. If an entry is .LT. 0.0, then that entry will be filled with default value used for that parameter. Only positions up to NPARAMS are accessed; defaults are used for highernumbered parameters. PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative refinement or not. Default: 1.0D+0 = 0.0 : No refinement is performed, and no error bounds are computed. = 1.0 : Use the extraprecise refinement algorithm. (other values are reserved for future use) PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual computations allowed for refinement. Default: 10 Aggressive: Set to 100 to permit convergence using approximate factorizations or factorizations other than LU. If the factorization uses a technique other than Gaussian elimination, the guarantees in err_bnds_norm and err_bnds_comp may no longer be trustworthy. PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code will attempt to find a solution with small componentwise relative error in the doubleprecision algorithm. Positive is true, 0.0 is false. Default: 1.0 (attempt componentwise convergence) 
[out]  WORK  WORK is DOUBLE PRECISION array, dimension (4*N) 
[out]  IWORK  IWORK is INTEGER array, dimension (N) 
[out]  INFO  INFO is INTEGER = 0: Successful exit. The solution to every righthand side is guaranteed. < 0: If INFO = i, the ith argument had an illegal value > 0 and <= N: U(INFO,INFO) is exactly zero. The factorization has been completed, but the factor U is exactly singular, so the solution and error bounds could not be computed. RCOND = 0 is returned. = N+J: The solution corresponding to the Jth righthand side is not guaranteed. The solutions corresponding to other right hand sides K with K > J may not be guaranteed as well, but only the first such righthand side is reported. If a small componentwise error is not requested (PARAMS(3) = 0.0) then the Jth righthand side is the first with a normwise error bound that is not guaranteed (the smallest J such that ERR_BNDS_NORM(J,1) = 0.0). By default (PARAMS(3) = 1.0) the Jth righthand side is the first with either a normwise or componentwise error bound that is not guaranteed (the smallest J such that either ERR_BNDS_NORM(J,1) = 0.0 or ERR_BNDS_COMP(J,1) = 0.0). See the definition of ERR_BNDS_NORM(:,1) and ERR_BNDS_COMP(:,1). To get information about all of the righthand sides check ERR_BNDS_NORM or ERR_BNDS_COMP. 
Definition at line 537 of file dgesvxx.f.
subroutine dsgesv  (  integer  N, 
integer  NRHS,  
double precision, dimension( lda, * )  A,  
integer  LDA,  
integer, dimension( * )  IPIV,  
double precision, dimension( ldb, * )  B,  
integer  LDB,  
double precision, dimension( ldx, * )  X,  
integer  LDX,  
double precision, dimension( n, * )  WORK,  
real, dimension( * )  SWORK,  
integer  ITER,  
integer  INFO  
) 
DSGESV computes the solution to system of linear equations A * X = B for GE matrices (mixed precision with iterative refinement)
Download DSGESV + dependencies [TGZ] [ZIP] [TXT]DSGESV computes the solution to a real system of linear equations A * X = B, where A is an NbyN matrix and X and B are NbyNRHS matrices. DSGESV first attempts to factorize the matrix in SINGLE PRECISION and use this factorization within an iterative refinement procedure to produce a solution with DOUBLE PRECISION normwise backward error quality (see below). If the approach fails the method switches to a DOUBLE PRECISION factorization and solve. The iterative refinement is not going to be a winning strategy if the ratio SINGLE PRECISION performance over DOUBLE PRECISION performance is too small. A reasonable strategy should take the number of righthand sides and the size of the matrix into account. This might be done with a call to ILAENV in the future. Up to now, we always try iterative refinement. The iterative refinement process is stopped if ITER > ITERMAX or for all the RHS we have: RNRM < SQRT(N)*XNRM*ANRM*EPS*BWDMAX where o ITER is the number of the current iteration in the iterative refinement process o RNRM is the infinitynorm of the residual o XNRM is the infinitynorm of the solution o ANRM is the infinityoperatornorm of the matrix A o EPS is the machine epsilon returned by DLAMCH('Epsilon') The value ITERMAX and BWDMAX are fixed to 30 and 1.0D+00 respectively.
[in]  N  N is INTEGER The number of linear equations, i.e., the order of the matrix A. N >= 0. 
[in]  NRHS  NRHS is INTEGER The number of right hand sides, i.e., the number of columns of the matrix B. NRHS >= 0. 
[in,out]  A  A is DOUBLE PRECISION array, dimension (LDA,N) On entry, the NbyN coefficient matrix A. On exit, if iterative refinement has been successfully used (INFO.EQ.0 and ITER.GE.0, see description below), then A is unchanged, if double precision factorization has been used (INFO.EQ.0 and ITER.LT.0, see description below), then the array A contains the factors L and U from the factorization A = P*L*U; the unit diagonal elements of L are not stored. 
[in]  LDA  LDA is INTEGER The leading dimension of the array A. LDA >= max(1,N). 
[out]  IPIV  IPIV is INTEGER array, dimension (N) The pivot indices that define the permutation matrix P; row i of the matrix was interchanged with row IPIV(i). Corresponds either to the single precision factorization (if INFO.EQ.0 and ITER.GE.0) or the double precision factorization (if INFO.EQ.0 and ITER.LT.0). 
[in]  B  B is DOUBLE PRECISION array, dimension (LDB,NRHS) The NbyNRHS right hand side matrix B. 
[in]  LDB  LDB is INTEGER The leading dimension of the array B. LDB >= max(1,N). 
[out]  X  X is DOUBLE PRECISION array, dimension (LDX,NRHS) If INFO = 0, the NbyNRHS solution matrix X. 
[in]  LDX  LDX is INTEGER The leading dimension of the array X. LDX >= max(1,N). 
[out]  WORK  WORK is DOUBLE PRECISION array, dimension (N,NRHS) This array is used to hold the residual vectors. 
[out]  SWORK  SWORK is REAL array, dimension (N*(N+NRHS)) This array is used to use the single precision matrix and the righthand sides or solutions in single precision. 
[out]  ITER  ITER is INTEGER < 0: iterative refinement has failed, double precision factorization has been performed 1 : the routine fell back to full precision for implementation or machinespecific reasons 2 : narrowing the precision induced an overflow, the routine fell back to full precision 3 : failure of SGETRF 31: stop the iterative refinement after the 30th iterations > 0: iterative refinement has been sucessfully used. Returns the number of iterations 
[out]  INFO  INFO is INTEGER = 0: successful exit < 0: if INFO = i, the ith argument had an illegal value > 0: if INFO = i, U(i,i) computed in DOUBLE PRECISION is exactly zero. The factorization has been completed, but the factor U is exactly singular, so the solution could not be computed. 
Definition at line 195 of file dsgesv.f.