Functions | |
| subroutine | cgels (trans, m, n, nrhs, a, lda, b, ldb, work, lwork, info) |
| CGELS solves overdetermined or underdetermined systems for GE matrices | |
| subroutine | cgelsd (m, n, nrhs, a, lda, b, ldb, s, rcond, rank, work, lwork, rwork, iwork, info) |
| CGELSD computes the minimum-norm solution to a linear least squares problem for GE matrices | |
| subroutine | cgelss (m, n, nrhs, a, lda, b, ldb, s, rcond, rank, work, lwork, rwork, info) |
| CGELSS solves overdetermined or underdetermined systems for GE matrices | |
| subroutine | cgelsy (m, n, nrhs, a, lda, b, ldb, jpvt, rcond, rank, work, lwork, rwork, info) |
| CGELSY solves overdetermined or underdetermined systems for GE matrices | |
| subroutine | cgesv (n, nrhs, a, lda, ipiv, b, ldb, info) |
| CGESV computes the solution to system of linear equations A * X = B for GE matrices (simple driver) | |
| subroutine | cgesvx (fact, trans, n, nrhs, a, lda, af, ldaf, ipiv, equed, r, c, b, ldb, x, ldx, rcond, ferr, berr, work, rwork, info) |
| CGESVX computes the solution to system of linear equations A * X = B for GE matrices | |
| subroutine | cgesvxx (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, rwork, info) |
| CGESVXX computes the solution to system of linear equations A * X = B for GE matrices | |
| subroutine | cgetsls (trans, m, n, nrhs, a, lda, b, ldb, work, lwork, info) |
| CGETSLS | |
| subroutine | cgelsx (m, n, nrhs, a, lda, b, ldb, jpvt, rcond, rank, work, rwork, info) |
| CGELSX solves overdetermined or underdetermined systems for GE matrices | |
This is the group of complex solve driver functions for GE matrices
| subroutine cgels | ( | character | trans, |
| integer | m, | ||
| integer | n, | ||
| integer | nrhs, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
CGELS solves overdetermined or underdetermined systems for GE matrices
Download CGELS + dependencies [TGZ] [ZIP] [TXT]
!> !> CGELS solves overdetermined or underdetermined complex linear systems !> involving an M-by-N matrix A, or its conjugate-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 = 'C' and m >= n: find the minimum norm solution of !> an underdetermined system A**H * X = B. !> !> 4. If TRANS = 'C' and m < n: find the least squares solution of !> an overdetermined system, i.e., solve the least squares problem !> minimize || B - A**H * 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 !> M-by-NRHS right hand side matrix B and the N-by-NRHS solution !> matrix X. !>
| [in] | TRANS | !> TRANS is CHARACTER*1 !> = 'N': the linear system involves A; !> = 'C': the linear system involves A**H. !> |
| [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 COMPLEX array, dimension (LDA,N) !> On entry, the M-by-N matrix A. !> if M >= N, A is overwritten by details of its QR !> factorization as returned by CGEQRF; !> if M < N, A is overwritten by details of its LQ !> factorization as returned by CGELQF. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [in,out] | B | !> B is COMPLEX array, dimension (LDB,NRHS) !> On entry, the matrix B of right hand side vectors, stored !> columnwise; B is M-by-NRHS if TRANS = 'N', or N-by-NRHS !> if TRANS = 'C'. !> 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 the !> modulus 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 = 'C' and m >= n, rows 1 to M of B contain the !> minimum norm solution vectors; !> if TRANS = 'C' 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 the modulus 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 COMPLEX 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 i-th argument had an illegal value !> > 0: if INFO = i, the i-th 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 180 of file cgels.f.
| subroutine cgelsd | ( | integer | m, |
| integer | n, | ||
| integer | nrhs, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| real, dimension( * ) | s, | ||
| real | rcond, | ||
| integer | rank, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| real, dimension( * ) | rwork, | ||
| integer, dimension( * ) | iwork, | ||
| integer | info ) |
CGELSD computes the minimum-norm solution to a linear least squares problem for GE matrices
Download CGELSD + dependencies [TGZ] [ZIP] [TXT]
!> !> CGELSD computes the minimum-norm solution to a real linear least !> squares problem: !> minimize 2-norm(| b - A*x |) !> using the singular value decomposition (SVD) of A. A is an M-by-N !> matrix which may be rank-deficient. !> !> 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 !> M-by-NRHS right hand side matrix B and the N-by-NRHS 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 (BLS) !> (2) Solve the BLS using a divide and conquer approach. !> (3) Apply back all the Householder transformations 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 X-MP, Cray Y-MP, Cray C-90, or !> Cray-2. 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 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 COMPLEX array, dimension (LDA,N) !> On entry, the M-by-N 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 COMPLEX array, dimension (LDB,NRHS) !> On entry, the M-by-NRHS right hand side matrix B. !> On exit, B is overwritten by the N-by-NRHS solution matrix X. !> If m >= n and RANK = n, the residual sum-of-squares for !> the solution in the i-th column is given by the sum of !> squares of the modulus 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). !> |
| [out] | S | !> S is REAL array, dimension (min(M,N)) !> The singular values of A in decreasing order. !> The condition number of A in the 2-norm = S(1)/S(min(m,n)). !> |
| [in] | RCOND | !> RCOND is REAL !> 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 COMPLEX 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 !> 2 * N + N * NRHS !> if M is greater than or equal to N or !> 2 * M + M * NRHS !> if M is less than N, the code will execute correctly. !> 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 array WORK and the !> minimum sizes of the arrays RWORK and IWORK, and returns !> these values as the first entries of the WORK, RWORK and !> IWORK arrays, and no error message related to LWORK is issued !> by XERBLA. !> |
| [out] | RWORK | !> RWORK is REAL array, dimension (MAX(1,LRWORK)) !> LRWORK >= !> 10*N + 2*N*SMLSIZ + 8*N*NLVL + 3*SMLSIZ*NRHS + !> MAX( (SMLSIZ+1)**2, N*(1+NRHS) + 2*NRHS ) !> if M is greater than or equal to N or !> 10*M + 2*M*SMLSIZ + 8*M*NLVL + 3*SMLSIZ*NRHS + !> MAX( (SMLSIZ+1)**2, N*(1+NRHS) + 2*NRHS ) !> 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 ) !> On exit, if INFO = 0, RWORK(1) returns the minimum LRWORK. !> |
| [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 i-th argument had an illegal value. !> > 0: the algorithm for computing the SVD failed to converge; !> if INFO = i, i off-diagonal elements of an intermediate !> bidiagonal form did not converge to zero. !> |
Definition at line 223 of file cgelsd.f.
| subroutine cgelss | ( | integer | m, |
| integer | n, | ||
| integer | nrhs, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| real, dimension( * ) | s, | ||
| real | rcond, | ||
| integer | rank, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| real, dimension( * ) | rwork, | ||
| integer | info ) |
CGELSS solves overdetermined or underdetermined systems for GE matrices
Download CGELSS + dependencies [TGZ] [ZIP] [TXT]
!> !> CGELSS computes the minimum norm solution to a complex linear !> least squares problem: !> !> Minimize 2-norm(| b - A*x |). !> !> using the singular value decomposition (SVD) of A. A is an M-by-N !> matrix which may be rank-deficient. !> !> 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 !> M-by-NRHS right hand side matrix B and the N-by-NRHS 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 COMPLEX array, dimension (LDA,N) !> On entry, the M-by-N 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 COMPLEX array, dimension (LDB,NRHS) !> On entry, the M-by-NRHS right hand side matrix B. !> On exit, B is overwritten by the N-by-NRHS solution matrix X. !> If m >= n and RANK = n, the residual sum-of-squares for !> the solution in the i-th column is given by the sum of !> squares of the modulus 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). !> |
| [out] | S | !> S is REAL array, dimension (min(M,N)) !> The singular values of A in decreasing order. !> The condition number of A in the 2-norm = S(1)/S(min(m,n)). !> |
| [in] | RCOND | !> RCOND is REAL !> 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 COMPLEX 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 >= 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] | RWORK | !> RWORK is REAL array, dimension (5*min(M,N)) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value. !> > 0: the algorithm for computing the SVD failed to converge; !> if INFO = i, i off-diagonal elements of an intermediate !> bidiagonal form did not converge to zero. !> |
Definition at line 176 of file cgelss.f.
| subroutine cgelsx | ( | integer | m, |
| integer | n, | ||
| integer | nrhs, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| integer, dimension( * ) | jpvt, | ||
| real | rcond, | ||
| integer | rank, | ||
| complex, dimension( * ) | work, | ||
| real, dimension( * ) | rwork, | ||
| integer | info ) |
CGELSX solves overdetermined or underdetermined systems for GE matrices
Download CGELSX + dependencies [TGZ] [ZIP] [TXT]
!> !> This routine is deprecated and has been replaced by routine CGELSY. !> !> CGELSX computes the minimum-norm solution to a complex linear least !> squares problem: !> minimize || A * X - B || !> using a complete orthogonal factorization of A. A is an M-by-N !> matrix which may be rank-deficient. !> !> 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 !> M-by-NRHS right hand side matrix B and the N-by-NRHS 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 unitary transformations from the right, arriving at the !> complete orthogonal factorization: !> A * P = Q * [ T11 0 ] * Z !> [ 0 0 ] !> The minimum-norm solution is then !> X = P * Z**H [ inv(T11)*Q1**H*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 COMPLEX array, dimension (LDA,N) !> On entry, the M-by-N 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 COMPLEX array, dimension (LDB,NRHS) !> On entry, the M-by-NRHS right hand side matrix B. !> On exit, the N-by-NRHS solution matrix X. !> If m >= n and RANK = n, the residual sum-of-squares for !> the solution in the i-th 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 i-th 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 i-th column of A*P !> was the k-th column of A. !> |
| [in] | RCOND | !> RCOND is REAL !> 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 COMPLEX array, dimension !> (min(M,N) + max( N, 2*min(M,N)+NRHS )), !> |
| [out] | RWORK | !> RWORK is REAL array, dimension (2*N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
Definition at line 182 of file cgelsx.f.
| subroutine cgelsy | ( | integer | m, |
| integer | n, | ||
| integer | nrhs, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| integer, dimension( * ) | jpvt, | ||
| real | rcond, | ||
| integer | rank, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| real, dimension( * ) | rwork, | ||
| integer | info ) |
CGELSY solves overdetermined or underdetermined systems for GE matrices
Download CGELSY + dependencies [TGZ] [ZIP] [TXT]
!> !> CGELSY computes the minimum-norm solution to a complex linear least !> squares problem: !> minimize || A * X - B || !> using a complete orthogonal factorization of A. A is an M-by-N !> matrix which may be rank-deficient. !> !> 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 !> M-by-NRHS right hand side matrix B and the N-by-NRHS 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 unitary transformations from the right, arriving at the !> complete orthogonal factorization: !> A * P = Q * [ T11 0 ] * Z !> [ 0 0 ] !> The minimum-norm solution is then !> X = P * Z**H [ inv(T11)*Q1**H*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 permutation of matrix B (the right hand side) is faster and !> more simple. !> o The call to the subroutine xGEQPF has been substituted by the !> the call to the subroutine xGEQP3. This subroutine is a Blas-3 !> version of the QR factorization with column pivoting. !> o Matrix B (the right hand side) is updated with Blas-3. !>
| [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 COMPLEX array, dimension (LDA,N) !> On entry, the M-by-N 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 COMPLEX array, dimension (LDB,NRHS) !> On entry, the M-by-NRHS right hand side matrix B. !> On exit, the N-by-NRHS 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 i-th 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 i-th column of A*P !> was the k-th column of A. !> |
| [in] | RCOND | !> RCOND is REAL !> 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 COMPLEX 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 >= MN + MAX( 2*MN, N+1, MN+NRHS ) !> where MN = min(M,N). !> The block algorithm requires that: !> LWORK >= MN + MAX( 2*MN, NB*(N+1), MN+MN*NB, MN+NB*NRHS ) !> where NB is an upper bound on the blocksize returned !> by ILAENV for the routines CGEQP3, CTZRZF, CTZRQF, CUNMQR, !> and CUNMRZ. !> !> 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] | RWORK | !> RWORK is REAL array, dimension (2*N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
Definition at line 208 of file cgelsy.f.
| subroutine cgesv | ( | integer | n, |
| integer | nrhs, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| integer | info ) |
CGESV computes the solution to system of linear equations A * X = B for GE matrices (simple driver)
Download CGESV + dependencies [TGZ] [ZIP] [TXT]
!> !> CGESV computes the solution to a complex system of linear equations !> A * X = B, !> where A is an N-by-N matrix and X and B are N-by-NRHS 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 COMPLEX array, dimension (LDA,N) !> On entry, the N-by-N 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 COMPLEX array, dimension (LDB,NRHS) !> On entry, the N-by-NRHS matrix of right hand side matrix B. !> On exit, if INFO = 0, the N-by-NRHS 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 i-th 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 121 of file cgesv.f.
| subroutine cgesvx | ( | character | fact, |
| character | trans, | ||
| integer | n, | ||
| integer | nrhs, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( ldaf, * ) | af, | ||
| integer | ldaf, | ||
| integer, dimension( * ) | ipiv, | ||
| character | equed, | ||
| real, dimension( * ) | r, | ||
| real, dimension( * ) | c, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| complex, dimension( ldx, * ) | x, | ||
| integer | ldx, | ||
| real | rcond, | ||
| real, dimension( * ) | ferr, | ||
| real, dimension( * ) | berr, | ||
| complex, dimension( * ) | work, | ||
| real, dimension( * ) | rwork, | ||
| integer | info ) |
CGESVX computes the solution to system of linear equations A * X = B for GE matrices
Download CGESVX + dependencies [TGZ] [ZIP] [TXT]
!> !> CGESVX uses the LU factorization to compute the solution to a complex !> system of linear equations !> A * X = B, !> where A is an N-by-N matrix and X and B are N-by-NRHS 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 (Conjugate 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 COMPLEX array, dimension (LDA,N) !> On entry, the N-by-N 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 COMPLEX 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 CGETRF. 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 CGETRF; 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 REAL 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 REAL 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 COMPLEX array, dimension (LDB,NRHS) !> On entry, the N-by-NRHS 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 COMPLEX array, dimension (LDX,NRHS) !> If INFO = 0 or INFO = N+1, the N-by-NRHS 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 REAL !> 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 REAL array, dimension (NRHS) !> The estimated forward error bound for each solution vector !> X(j) (the j-th 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 REAL 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 COMPLEX array, dimension (2*N) !> |
| [out] | RWORK | !> RWORK is REAL array, dimension (2*N) !> On exit, RWORK(1) contains the reciprocal pivot growth !> factor norm(A)/norm(U). The norm is !> used. If RWORK(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 !> RWORK(1) contains the reciprocal pivot growth factor for the !> leading INFO columns of A. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th 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 347 of file cgesvx.f.
| subroutine cgesvxx | ( | character | fact, |
| character | trans, | ||
| integer | n, | ||
| integer | nrhs, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( ldaf, * ) | af, | ||
| integer | ldaf, | ||
| integer, dimension( * ) | ipiv, | ||
| character | equed, | ||
| real, dimension( * ) | r, | ||
| real, dimension( * ) | c, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| complex, dimension( ldx , * ) | x, | ||
| integer | ldx, | ||
| real | rcond, | ||
| real | rpvgrw, | ||
| real, dimension( * ) | berr, | ||
| integer | n_err_bnds, | ||
| real, dimension( nrhs, * ) | err_bnds_norm, | ||
| real, dimension( nrhs, * ) | err_bnds_comp, | ||
| integer | nparams, | ||
| real, dimension( * ) | params, | ||
| complex, dimension( * ) | work, | ||
| real, dimension( * ) | rwork, | ||
| integer | info ) |
CGESVXX computes the solution to system of linear equations A * X = B for GE matrices
Download CGESVXX + dependencies [TGZ] [ZIP] [TXT]
!> !> CGESVXX uses the LU factorization to compute the solution to a !> complex system of linear equations A * X = B, where A is an !> N-by-N matrix and X and B are N-by-NRHS matrices. !> !> If requested, both normwise and maximum componentwise error bounds !> are returned. CGESVXX will return a solution with a tiny !> guaranteed error (O(eps) where eps is the working machine !> precision) unless the matrix is very ill-conditioned, in which !> case a warning is returned. Relevant condition numbers also are !> calculated and returned. !> !> CGESVXX accepts user-provided factorizations and equilibration !> factors; see the definitions of the FACT and EQUED options. !> Solving with refinement and using a factorization from a previous !> CGESVXX call will also produce a solution with either O(eps) !> errors or warnings, but we cannot make that claim for general !> user-provided factorizations and equilibration factors if they !> differ from what CGESVXX would itself produce. !>
!> !> 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 (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) !> |
| [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 COMPLEX array, dimension (LDA,N) !> On entry, the N-by-N 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 COMPLEX 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 CGETRF. 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 CGETRF; 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 REAL 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 REAL 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 COMPLEX array, dimension (LDB,NRHS) !> On entry, the N-by-NRHS 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 COMPLEX array, dimension (LDX,NRHS) !> If INFO = 0, the N-by-NRHS 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 REAL !> 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 REAL !> Reciprocal pivot growth. On exit, this contains the reciprocal !> pivot growth factor norm(A)/norm(U). The !> 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 CGESVX, this quantity is !> returned in WORK(1). !> |
| [out] | BERR | !> BERR is REAL 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 REAL array, dimension (NRHS, N_ERR_BNDS)
!> For each right-hand 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
!> right-hand side.
!>
!> The second index in ERR_BNDS_NORM(:,err) contains the following
!> three fields:
!> err = 1 boolean. Trust the answer if the
!> reciprocal condition number is less than the threshold
!> sqrt(n) * slamch('Epsilon').
!>
!> err = 2 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) * slamch('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) * slamch('Epsilon') to determine if the error
!> estimate is . 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 REAL array, dimension (NRHS, N_ERR_BNDS)
!> For each right-hand 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 right-hand 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 right-hand side. If
!> componentwise accuracy is not requested (PARAMS(3) = 0.0), then
!> ERR_BNDS_COMP is not accessed. If N_ERR_BNDS < 3, then at most
!> the first (:,N_ERR_BNDS) entries are returned.
!>
!> The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
!> right-hand side.
!>
!> The second index in ERR_BNDS_COMP(:,err) contains the following
!> three fields:
!> err = 1 boolean. Trust the answer if the
!> reciprocal condition number is less than the threshold
!> sqrt(n) * slamch('Epsilon').
!>
!> err = 2 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) * slamch('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) * slamch('Epsilon') to determine if the error
!> estimate is . 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 right-hand 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 <= 0, the !> PARAMS array is never referenced and default values are used. !> |
| [in,out] | PARAMS | !> PARAMS is REAL array, dimension NPARAMS !> Specifies algorithm parameters. If an entry is < 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 higher-numbered parameters. !> !> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative !> refinement or not. !> Default: 1.0 !> = 0.0: No refinement is performed, and no error bounds are !> computed. !> = 1.0: Use the double-precision refinement algorithm, !> possibly with doubled-single computations if the !> compilation environment does not support DOUBLE !> PRECISION. !> (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 double-precision algorithm. Positive !> is true, 0.0 is false. !> Default: 1.0 (attempt componentwise convergence) !> |
| [out] | WORK | !> WORK is COMPLEX array, dimension (2*N) !> |
| [out] | RWORK | !> RWORK is REAL array, dimension (2*N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: Successful exit. The solution to every right-hand side is !> guaranteed. !> < 0: If INFO = -i, the i-th 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 right-hand 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 right-hand side is reported. If a small !> componentwise error is not requested (PARAMS(3) = 0.0) then !> the Jth right-hand 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 right-hand 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 right-hand sides check ERR_BNDS_NORM or !> ERR_BNDS_COMP. !> |
Definition at line 538 of file cgesvxx.f.
| subroutine cgetsls | ( | character | trans, |
| integer | m, | ||
| integer | n, | ||
| integer | nrhs, | ||
| complex, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| complex, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| complex, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
CGETSLS
!> !> CGETSLS solves overdetermined or underdetermined complex linear systems !> involving an M-by-N matrix A, using a tall skinny QR or short wide 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 = 'C' and m >= n: find the minimum norm solution of !> an undetermined system A**T * X = B. !> !> 4. If TRANS = 'C' 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 !> M-by-NRHS right hand side matrix B and the N-by-NRHS solution !> matrix X. !>
| [in] | TRANS | !> TRANS is CHARACTER*1 !> = 'N': the linear system involves A; !> = 'C': the linear system involves A**H. !> |
| [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 COMPLEX array, dimension (LDA,N) !> On entry, the M-by-N matrix A. !> On exit, !> A is overwritten by details of its QR or LQ !> factorization as returned by CGEQR or CGELQ. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [in,out] | B | !> B is COMPLEX array, dimension (LDB,NRHS) !> On entry, the matrix B of right hand side vectors, stored !> columnwise; B is M-by-NRHS if TRANS = 'N', or N-by-NRHS !> if TRANS = 'C'. !> 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. !> if TRANS = 'N' and m < n, rows 1 to N of B contain the !> minimum norm solution vectors; !> if TRANS = 'C' and m >= n, rows 1 to M of B contain the !> minimum norm solution vectors; !> if TRANS = 'C' and m < n, rows 1 to M of B contain the !> least squares solution vectors. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= MAX(1,M,N). !> |
| [out] | WORK | !> (workspace) COMPLEX array, dimension (MAX(1,LWORK)) !> On exit, if INFO = 0, WORK(1) contains optimal (or either minimal !> or optimal, if query was assumed) LWORK. !> See LWORK for details. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. !> If LWORK = -1 or -2, then a workspace query is assumed. !> If LWORK = -1, the routine calculates optimal size of WORK for the !> optimal performance and returns this value in WORK(1). !> If LWORK = -2, the routine calculates minimal size of WORK and !> returns this value in WORK(1). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, the i-th 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 160 of file cgetsls.f.