gesvx(3)
๐
gesvx(3) โ Library Functions Manual โจ
okay bestie, welcome to gesvx(3) from the Library Functions Manual โ this is the expert-level โfactor and solveโ moment for GE matrices, and we are gonna get you through it without losing a single detail. no cap. ๐ซถ
๐ธ NAME ๐ธ
gesvx โ gesvx: factor and solve, expert
๐ฆ SYNOPSIS ๐ฆ
โจ Functions โจ
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 matricessubroutine 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 matricessubroutine sgesvx (fact, trans, n, nrhs, a, lda, af, ldaf, ipiv, equed, r, c, b, ldb, x, ldx, rcond, ferr, berr, work, iwork, info)โSGESVX computes the solution to system of linear equations A * X = B for GE matricessubroutine zgesvx (fact, trans, n, nrhs, a, lda, af, ldaf, ipiv, equed, r, c, b, ldb, x, ldx, rcond, ferr, berr, work, rwork, info)โZGESVX computes the solution to system of linear equations A * X = B for GE matrices
๐ Detailed Description ๐
this is the big-picture section, and honestly itโs giving main character energy ๐ซ
๐ง Function Documentation ๐ง
โจ subroutine cgesvx โจ
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
Purpose:
okay so 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. ๐
Description:
The following steps are performed:
- 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'). ๐ซถ
- If
FACT = 'N'or'E', the LU decomposition is used to factor the matrixA(after equilibration ifFACT = 'E') as
A = P * L * U,
where P is a permutation matrix, L is a unit lower triangular matrix, and U is upper triangular. ๐
- If some
U(i,i)=0, so thatUis exactly singular, then the routine returns withINFO = i. Otherwise, the factored form ofAis used to estimate the condition number of the matrixA. If the reciprocal of the condition number is less than machine precision,INFO = N+1is returned as a warning, but the routine still goes on to solve forXand compute error bounds as described below. ๐ญ but it keeps going, iconic - The system of equations is solved for
Xusing the factored form ofA. โญ - Iterative refinement is applied to improve the computed solution matrix and calculate error bounds and backward error estimates for it. ๐ฅ
- If equilibration was used, the matrix
Xis premultiplied bydiag(C)(ifTRANS = 'N') ordiag(R)(ifTRANS = 'T'or'C') so that it solves the original system before equilibration. ๐
๐ Parameters ๐
FACTโFACT is CHARACTER*1and it specifies whether the factored form of matrixAis supplied on entry, and if not, whetherAshould be equilibrated before it is factored. the tea:= 'F': on entry,AFandIPIVcontain the factored form ofA. IfEQUEDis not'N',Ahas been equilibrated with scaling factors given byRandC.A,AF, andIPIVare not modified. ๐ซถ= 'N': matrixAwill be copied toAFand factored. โจ= 'E': matrixAwill be equilibrated if necessary, then copied toAFand factored. ๐
TRANSโTRANS is CHARACTER*1and it 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)
NโN is INTEGER, the number of linear equations, i.e. the order of matrixA.N >= 0.NRHSโNRHS is INTEGER, the number of right hand sides, i.e. the number of columns of matricesBandX.NRHS >= 0.AโA is COMPLEX array, dimension (LDA,N). On entry, theN-by-NmatrixA. IfFACT = 'F'andEQUEDis not'N', thenAmust have been equilibrated by the scaling factors inRand/orC.Ais not modified ifFACT = 'F'or'N', or ifFACT = 'E'andEQUED = 'N'on exit. On exit, ifEQUED .ne. 'N',Ais scaled as follows:EQUED = 'R':A := diag(R) * AEQUED = 'C':A := A * diag(C)EQUED = 'B':A := diag(R) * A * diag(C)
LDAโLDA is INTEGER, the leading dimension of arrayA.LDA >= max(1,N).AFโAF is COMPLEX array, dimension (LDAF,N). IfFACT = 'F', thenAFis an input argument and on entry contains the factorsLandUfrom the factorizationA = P*L*Uas computed byCGETRF. IfEQUED .ne. 'N', thenAFis the factored form of the equilibrated matrixA. IfFACT = 'N', thenAFis an output argument and on exit returns the factorsLandUfrom the factorizationA = P*L*Uof the original matrixA. IfFACT = 'E', thenAFis an output argument and on exit returns the factorsLandUfrom the factorizationA = P*L*Uof the equilibrated matrixA(see the description ofAfor the form of the equilibrated matrix). ๐ฆLDAFโLDAF is INTEGER, the leading dimension of arrayAF.LDAF >= max(1,N).IPIVโIPIV is INTEGER array, dimension (N). IfFACT = 'F', thenIPIVis an input argument and on entry contains the pivot indices from the factorizationA = P*L*Uas computed byCGETRF; rowiof the matrix was interchanged with rowIPIV(i). IfFACT = 'N', thenIPIVis an output argument and on exit contains the pivot indices from the factorizationA = P*L*Uof the original matrixA. IfFACT = 'E', thenIPIVis an output argument and on exit contains the pivot indices from the factorizationA = P*L*Uof the equilibrated matrixA. ๐EQUEDโEQUED is CHARACTER*1and it specifies the form of equilibration that was done:= 'N': No equilibration (always true ifFACT = 'N').= 'R': Row equilibration, i.e.Ahas been premultiplied bydiag(R).= 'C': Column equilibration, i.e.Ahas been postmultiplied bydiag(C).= 'B': Both row and column equilibration, i.e.Ahas been replaced bydiag(R) * A * diag(C).EQUEDis an input argument ifFACT = 'F'; otherwise, it is an output argument.
RโR is REAL array, dimension (N). The row scale factors forA. IfEQUED = 'R'or'B',Ais multiplied on the left bydiag(R); ifEQUED = 'N'or'C',Ris not accessed.Ris an input argument ifFACT = 'F'; otherwise,Ris an output argument. IfFACT = 'F'andEQUED = 'R'or'B', each element ofRmust be positive. ๐CโC is REAL array, dimension (N). The column scale factors forA. IfEQUED = 'C'or'B',Ais multiplied on the right bydiag(C); ifEQUED = 'N'or'R',Cis not accessed.Cis an input argument ifFACT = 'F'; otherwise,Cis an output argument. IfFACT = 'F'andEQUED = 'C'or'B', each element ofCmust be positive. ๐BโB is COMPLEX array, dimension (LDB,NRHS). On entry, theN-by-NRHSright hand side matrixB. On exit:- if
EQUED = 'N',Bis not modified; - if
TRANS = 'N'andEQUED = 'R'or'B',Bis overwritten bydiag(R)*B; - if
TRANS = 'T'or'C'andEQUED = 'C'or'B',Bis overwritten bydiag(C)*B.
- if
LDBโLDB is INTEGER, the leading dimension of arrayB.LDB >= max(1,N).XโX is COMPLEX array, dimension (LDX,NRHS). IfINFO = 0orINFO = N+1, theN-by-NRHSsolution matrixXto the original system of equations. Note thatAandBare modified on exit ifEQUED .ne. 'N', and the solution to the equilibrated system isinv(diag(C))*XifTRANS = 'N'andEQUED = 'C'or'B', orinv(diag(R))*XifTRANS = 'T'or'C'andEQUED = 'R'or'B'. ๐LDXโLDX is INTEGER, the leading dimension of arrayX.LDX >= max(1,N).RCONDRCONDโ itโsREAL, bestie. The estimate of the reciprocal condition number of the matrixAafter equilibration (if done). IfRCONDis less than the machine precision (in particular, ifRCOND = 0), the matrix is singular to working precision. This condition is indicated by a return code ofINFO > 0.FERRโREALarray, dimension(NRHS). The estimated forward error bound for each solution vectorX(j)(thej-th column of the solution matrixX). IfXTRUEis the true solution corresponding toX(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 inX(j). The estimate is as reliable as the estimate forRCOND, and is almost always a slight overestimate of the true error.BERRโREALarray, dimension(NRHS). The componentwise relative backward error of each solution vectorX(j)(i.e., the smallest relative change in any element ofAorBthat makesX(j)an exact solution).WORKโCOMPLEXarray, dimension(2*N).RWORKโREALarray, dimension(MAX(1,2*N)). On exit,RWORK(1)contains the reciprocal pivot growth factornorm(A)/norm(U). The norm is used. IfRWORK(1)is much less than 1, then the stability of the LU factorization of the (equilibrated) matrixAcould be poor. This also means that the solutionX, condition estimatorRCOND, and forward error boundFERRcould be unreliable. If factorization fails with0<INFO<=N, thenRWORK(1)contains the reciprocal pivot growth factor for the leadingINFOcolumns ofA.INFOโINTEGER= 0: successful exit< 0: ifINFO = -i, thei-th argument had an illegal value> 0: ifINFO = i, andiis<= N:U(i,i)is exactly zero. The factorization has been completed, but the factorUis exactly singular, so the solution and error bounds could not be computed.RCOND = 0is returned.= N+1:Uis nonsingular, butRCONDis 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 ofRCONDwould suggest.
๐ธ Author ๐ธ
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Definition at line 347 of file cgesvx.f.
๐ฆ subroutine dgesvx ๐ฆ
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 โ periodt ๐
.
๐ฏ Purpose ๐ฏ
DGESVX uses the LU factorization to compute the solution to a real 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. Iconic behavior, honestly. โจ
๐ Description ๐
The following steps are performed:
- 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').
- If
FACT = 'N'or'E'โ the LU decomposition is used to factor the matrixA(after equilibration ifFACT = 'E') as
A = P * L * U,
where P is a permutation matrix, L is a unit lower triangular matrix, and U is upper triangular.
- If some
U(i,i)=0โ so thatUis exactly singular, then the routine returns withINFO = i. Otherwise, the factored form ofAis used to estimate the condition number of the matrixA. If the reciprocal of the condition number is less than machine precision,INFO = N+1is returned as a warning, but the routine still goes on to solve forXand compute error bounds as described below. - The system of equations is solved for
Xusing the factored form ofA. - Iterative refinement is applied to improve the computed solution matrix and calculate error bounds and backward error estimates for it.
- If equilibration was used, the matrix
Xis premultiplied bydiag(C)(ifTRANS = 'N') ordiag(R)(ifTRANS = 'T'or'C') so that it solves the original system before equilibration.
๐ Parameters ๐
FACTโCHARACTER*1. Specifies whether or not the factored form of the matrixAis supplied on entry, and if not, whether the matrixAshould be equilibrated before it is factored.= 'F': On entry,AFandIPIVcontain the factored form ofA. IfEQUEDis not'N', the matrixAhas been equilibrated with scaling factors given byRandC.A,AF, andIPIVare not modified.= 'N': The matrixAwill be copied toAFand factored.= 'E': The matrixAwill be equilibrated if necessary, then copied toAFand factored.
TRANSโ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)
NโINTEGER. The number of linear equations, i.e., the order of the matrixA.N >= 0.NRHSโINTEGER. The number of right hand sides, i.e., the number of columns of the matricesBandX.NRHS >= 0.AโDOUBLE PRECISIONarray, dimension(LDA,N). On entry, theN-by-NmatrixA. IfFACT = 'F'andEQUEDis not'N', thenAmust have been equilibrated by the scaling factors inRand/orC.Ais not modified ifFACT = 'F'or'N', or ifFACT = 'E'andEQUED = 'N'on exit.
On exit, if EQUED .ne. 'N', A is scaled as follows:
EQUED = 'R':A := diag(R) * AEQUED = 'C':A := A * diag(C)EQUED = 'B':A := diag(R) * A * diag(C).
LDAโINTEGER. The leading dimension of the arrayA.LDA >= max(1,N).AFโDOUBLE PRECISIONarray, dimension(LDAF,N). IfFACT = 'F', thenAFis an input argument and on entry contains the factorsLandUfrom the factorizationA = P*L*Uas computed byDGETRF. IfEQUED .ne. 'N', thenAFis the factored form of the equilibrated matrixA.
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).
LDAFโINTEGER. The leading dimension of the arrayAF.LDAF >= max(1,N).IPIVโINTEGERarray, dimension(N). IfFACT = 'F', thenIPIVis an input argument and on entry contains the pivot indices from the factorizationA = P*L*Uas computed byDGETRF; rowiof the matrix was interchanged with rowIPIV(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.
EQUEDEQUEDโCHARACTER*1. Specifies the form of equilibration that was done. ๐ Values:'N'= no equilibration (always true ifFACT = 'N');'R'= row equilibration, i.e., A has been premultiplied bydiag(R);'C'= column equilibration, i.e., A has been postmultiplied bydiag(C);'B'= both row and column equilibration, i.e., A has been replaced bydiag(R) * A * diag(C). EQUED is an input argument ifFACT = 'F'; otherwise, it is an output argument.RโDOUBLE PRECISIONarray, dimension(N). The row scale factors for A. IfEQUED = 'R'or'B', A is multiplied on the left bydiag(R); ifEQUED = 'N'or'C', R is not accessed. R is an input argument ifFACT = 'F'; otherwise, R is an output argument. IfFACT = 'F'andEQUED = 'R'or'B', each element of R must be positive. ๐ธCโDOUBLE PRECISIONarray, dimension(N). The column scale factors for A. IfEQUED = 'C'or'B', A is multiplied on the right bydiag(C); ifEQUED = 'N'or'R', C is not accessed. C is an input argument ifFACT = 'F'; otherwise, C is an output argument. IfFACT = 'F'andEQUED = 'C'or'B', each element of C must be positive. ๐ฆBโDOUBLE PRECISIONarray, dimension(LDB,NRHS). On entry, the N-by-NRHS right hand side matrix B. On exit: ifEQUED = 'N', B is not modified; ifTRANS = 'N'andEQUED = 'R'or'B', B is overwritten bydiag(R)*B; ifTRANS = 'T'or'C'andEQUED = 'C'or'B', B is overwritten bydiag(C)*B. ๐LDBโINTEGER. The leading dimension of the array B.LDB >= max(1,N). โจXโDOUBLE PRECISIONarray, dimension(LDX,NRHS). IfINFO = 0orINFO = N+1, the N-by-NRHS solution matrix X to the original system of equations. Note that A and B are modified on exit ifEQUED .ne. 'N', and the solution to the equilibrated system isinv(diag(C))*XifTRANS = 'N'andEQUED = 'C'or'B', orinv(diag(R))*XifTRANS = 'T'or'C'andEQUED = 'R'or'B'. ๐LDXโINTEGER. The leading dimension of the array X.LDX >= max(1,N). ๐RCONDโ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, ifRCOND = 0), the matrix is singular to working precision. This condition is indicated by a return code ofINFO > 0. ๐ฅFERRโDOUBLE PRECISIONarray, dimension(NRHS). The estimated forward error bound for each solution vectorX(j)(the j-th column of the solution matrix X). If XTRUE is the true solution corresponding toX(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 inX(j). The estimate is as reliable as the estimate for RCOND, and is almost always a slight overestimate of the true error. ๐BERRโDOUBLE PRECISIONarray, dimension(NRHS). The componentwise relative backward error of each solution vectorX(j)(i.e., the smallest relative change in any element of A or B that makesX(j)an exact solution). ๐WORKโDOUBLE PRECISIONarray, dimension(MAX(1,4*N)). On exit,WORK(1)contains the reciprocal pivot growth factornorm(A)/norm(U). The norm is used. IfWORK(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 with0<INFO<=N, thenWORK(1)contains the reciprocal pivot growth factor for the leading INFO columns of A. ๐ญIWORKโINTEGERarray, dimension(N). ๐INFOโINTEGER. Exit status. ๐= 0: successful exit.< 0: ifINFO = -i, the i-th argument had an illegal value.> 0: ifINFO = 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 = 0is 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.
Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Definition at line 346 of file dgesvx.f.
๐ subroutine sgesvx ๐
subroutine sgesvx (character fact, character trans, integer n, integer nrhs,
real, dimension( lda, * ) a, integer lda, real, dimension( ldaf, * ) af,
integer ldaf, integer, dimension( * ) ipiv, character equed, real,
dimension( * ) r, real, dimension( * ) c, real, dimension( ldb, * ) b,
integer ldb, real, dimension( ldx, * ) x, integer ldx, real rcond, real,
dimension( * ) ferr, real, dimension( * ) berr, real, dimension( * )
work, integer, dimension( * ) iwork, integer info)
SGESVX computes the solution to system of linear equations A * X = B for GE matrices.
Purpose
SGESVX uses the LU factorization to compute the solution to a real 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. โจ
Description
The following steps are performed:
- 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'). ๐
- If
FACT = 'N'or'E', the LU decomposition is used to factor the matrix A (after equilibration ifFACT = 'E') asA = P * L * U, where P is a permutation matrix, L is a unit lower triangular matrix, and U is upper triangular. ๐ฅ - If some
U(i,i)=0, so that U is exactly singular, then the routine returns withINFO = 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+1is returned as a warning, but the routine still goes on to solve for X and compute error bounds as described below. ๐ญ - The system of equations is solved for X using the factored form of A. ๐
- Iterative refinement is applied to improve the computed solution matrix and calculate error bounds and backward error estimates for it. ๐
- If equilibration was used, the matrix X is premultiplied by
diag(C)(ifTRANS = 'N') ordiag(R)(ifTRANS = 'T'or'C') so that it solves the original system before equilibration. โจ
Parameters
FACTโ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.
TRANSโ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)
NโINTEGER. The number of linear equations, i.e., the order of the matrix A.N >= 0. ๐ฆNRHSโINTEGER. The number of right hand sides, i.e., the number of columns of the matrices B and X.NRHS >= 0. ๐Aโ
A is up next, and sheโs the whole reason weโre here ๐
AโA is REAL array, dimension (LDA,N). On entry, the N-by-N matrixA. IfFACT = 'F'andEQUEDis not'N', thenAmust have been equilibrated by the scaling factors inRand/orC.Ais not modified ifFACT = 'F'or'N', or ifFACT = 'E'andEQUED = 'N'on exit.
On exit, if EQUED .ne. 'N', A is scaled as follows:
EQUED = 'R': A := diag(R) * AEQUED = 'C': A := A * diag(C)EQUED = 'B': A := diag(R) * A * diag(C).
LDAโLDA is INTEGER. The leading dimension of the arrayA.LDA >= max(1,N).AFโAF is REAL array, dimension (LDAF,N).- If
FACT = 'F', thenAFis an input argument and on entry contains the factorsLandUfrom the factorizationA = P*L*Uas computed bySGETRF. IfEQUED .ne. 'N', thenAFis the factored form of the equilibrated matrixA. - If
FACT = 'N', thenAFis an output argument and on exit returns the factorsLandUfrom the factorizationA = P*L*Uof the original matrixA. - If
FACT = 'E', thenAFis an output argument and on exit returns the factorsLandUfrom the factorizationA = P*L*Uof the equilibrated matrixA(see the description ofAfor the form of the equilibrated matrix).
- If
LDAFโLDAF is INTEGER. The leading dimension of the arrayAF.LDAF >= max(1,N).IPIVโIPIV is INTEGER array, dimension (N).- If
FACT = 'F', thenIPIVis an input argument and on entry contains the pivot indices from the factorizationA = P*L*Uas computed bySGETRF; row i of the matrix was interchanged with rowIPIV(i). - If
FACT = 'N', thenIPIVis an output argument and on exit contains the pivot indices from the factorizationA = P*L*Uof the original matrixA. - If
FACT = 'E', thenIPIVis an output argument and on exit contains the pivot indices from the factorizationA = P*L*Uof the equilibrated matrixA.
- If
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.
RโR is REAL array, dimension (N). The row scale factors forA. IfEQUED = 'R'or'B',Ais multiplied on the left bydiag(R); ifEQUED = 'N'or'C',Ris not accessed.Ris an input argument ifFACT = 'F'; otherwise,Ris an output argument. IfFACT = 'F'andEQUED = 'R'or'B', each element ofRmust be positive.CโC is REAL array, dimension (N). The column scale factors forA. IfEQUED = 'C'or'B',Ais multiplied on the right bydiag(C); ifEQUED = 'N'or'R',Cis not accessed.Cis an input argument ifFACT = 'F'; otherwise,Cis an output argument. IfFACT = 'F'andEQUED = 'C'or'B', each element ofCmust be positive.BโB is REAL array, dimension (LDB,NRHS). On entry, the N-by-NRHS right hand side matrixB. On exit,- if
EQUED = 'N',Bis not modified; - if
TRANS = 'N'andEQUED = 'R'or'B',Bis overwritten bydiag(R)*B; - if
TRANS = 'T'or'C'andEQUED = 'C'or'B',Bis overwritten bydiag(C)*B.
- if
LDBโLDB is INTEGER. The leading dimension of the arrayB.LDB >= max(1,N).XโX is REAL array, dimension (LDX,NRHS). IfINFO = 0orINFO = N+1, the N-by-NRHS solution matrixXto the original system of equations. Note thatAandBare modified on exit ifEQUED .ne. 'N', and the solution to the equilibrated system isinv(diag(C))*XifTRANS = 'N'andEQUED = 'C'or'B', orinv(diag(R))*XifTRANS = 'T'or'C'andEQUED = 'R'or'B'.LDXโLDX is INTEGER. The leading dimension of the arrayX.LDX >= max(1,N).RCONDโRCOND is REAL. The estimate of the reciprocal condition number of the matrixAafter equilibration (if done). IfRCONDis less than the machine precision (in particular, ifRCOND = 0), the matrix is singular to working precision. This condition is indicated by a return code ofINFO > 0.FERRโFERR is REAL array, dimension (NRHS). The estimated forward error bound for each solution vectorX(j)(the j-th column of the solution matrixX). IfXTRUEis the true solution corresponding toX(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 inX(j). The estimate is as reliable as the estimate forRCOND, and is almost always a slight overestimate of the true error.BERRโBERR is REAL array, dimension (NRHS). The componentwise relative backward error of each solution vectorX(j)(i.e., the smallest relative change in any element ofAorBthat makesX(j)an exact solution).WORKโWORK is REAL array, dimension (MAX(1,4*N)). On exit,WORK(1)contains the reciprocal pivot growth factornorm(A)/norm(U). The norm is used. IfWORK(1)is much less than 1, then the stability of the LU factorization of the (equilibrated) matrixAcould be poor. This also means that the solutionX, condition estimatorRCOND, and forward error boundFERRcould be unreliable. If factorization fails with0<INFO<=N, thenWORK(1)contains the reciprocal pivot growth factor for the leadingINFOcolumns ofA.IWORKโIWORK is INTEGER array, dimension (N).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.
๐ Author ๐
Univ. of TennesseeUniv. of California BerkeleyUniv. of Colorado DenverNAG Ltd.
Definition at line 346 of file sgesvx.f.
subroutine zgesvx (character fact, character trans, integer n, integer nrhs,
complex*16, dimension( lda, * ) a, integer lda, complex*16, dimension(
ldaf, * ) af, integer ldaf, integer, dimension( * ) ipiv, character
equed, double precision, dimension( * ) r, double precision, dimension(
* ) c, complex*16, dimension( ldb, * ) b, integer ldb, complex*16,
dimension( ldx, * ) x, integer ldx, double precision rcond, double
precision, dimension( * ) ferr, double precision, dimension( * ) berr,
complex*16, dimension( * ) work, double precision, dimension( * ) rwork,
integer info)
ZGESVX computes the solution to system of linear equations A * X = B for GE matrices.
๐ Purpose ๐
ZGESVX 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.
๐ฆ Description ๐ฆ
โจ okay so the following steps are performed: โจ
- 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').
- If
FACT = 'N'or'E', the LU decomposition is used to factor the matrixA(after equilibration ifFACT = 'E') as
A = P * L * U,
where P is a permutation matrix, L is a unit lower triangular matrix, and U is upper triangular.
- If some
U(i,i)=0, so thatUis exactly singular, then the routine returns withINFO = i. Otherwise, the factored form ofAis used to estimate the condition number of the matrixA. If the reciprocal of the condition number is less than machine precision,INFO = N+1is returned as a warning, but the routine still goes on to solve forXand compute error bounds as described below. - The system of equations is solved for
Xusing the factored form ofA. slay. - Iterative refinement is applied to improve the computed solution matrix and calculate error bounds and backward error estimates for it.
- If equilibration was used, the matrix
Xis premultiplied bydiag(C)(ifTRANS = 'N') ordiag(R)(ifTRANS = 'T'or'C') so that it solves the original system before equilibration.
๐ Parameters ๐
๐ FACT ๐
FACT is CHARACTER*1. It 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. lowkey the โdo you already have the factorization?โ switch.
= 'F': On entry,AFandIPIVcontain the factored form ofA. IfEQUEDis not'N', the matrixAhas been equilibrated with scaling factors given byRandC.A,AF, andIPIVare not modified. no touchy, fr fr.= 'N': The matrixAwill be copied toAFand factored.= 'E': The matrixAwill be equilibrated if necessary, then copied toAFand factored.
๐ TRANS ๐
TRANS is CHARACTER*1. It 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)
๐ธ N ๐ธ
N is INTEGER. The number of linear equations, i.e., the order of the matrix A. N >= 0.
๐ฆ NRHS ๐ฆ
NRHS is INTEGER. The number of right hand sides, i.e., the number of columns of the matrices B and X. NRHS >= 0.
โจ A โจ
A is COMPLEX*16 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) * AEQUED = 'C':A := A * diag(C)EQUED = 'B':A := diag(R) * A * diag(C).
๐ LDA ๐
LDA is INTEGER. The leading dimension of the array A. LDA >= max(1,N).
๐ AF ๐
AF is COMPLEX*16 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 ZGETRF. 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).
๐ซถ LDAF ๐ซถ
LDAF is INTEGER. The leading dimension of the array AF. LDAF >= max(1,N).
๐ฅ 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 ZGETRF; 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.
๐ EQUED ๐
EQUED is CHARACTER*1. It specifies the form of equilibration that was done. itโs giving โwhich scaling glow-up happened?โ
= 'N': No equilibration (always true ifFACT = 'N').= 'R': Row equilibration, i.e.,Ahas been premultiplied bydiag(R).= 'C': Column equilibration, i.e.,Ahas been postmultiplied bydiag(C).= 'B': Both row and column equilibration, i.e.,Ahas been replaced bydiag(R) * A * diag(C).
EQUED is an input argument if FACT = 'F'; otherwise, it is an output argument.
๐ 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.
๐ง 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.
โญ B โญ
B is COMPLEX*16 array, dimension (LDB,NRHS). On entry, the N-by-NRHS right hand side matrix B.
On exit:
- if
EQUED = 'N',Bis not modified; - if
TRANS = 'N'andEQUED = 'R'or'B',Bis overwritten bydiag(R)*B; - if
TRANS = 'T'or'C'andEQUED = 'C'or'B',Bis overwritten bydiag(C)*B.
๐ LDB ๐
LDB is INTEGER. The leading dimension of the array B. LDB >= max(1,N).
๐ X ๐
X is COMPLEX*16 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'.
๐ฆ LDX ๐ฆ
LDX is INTEGER. The leading dimension of the array X. LDX >= max(1,N).
๐ 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.
๐ FERR ๐
FERR is DOUBLE PRECISION 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.
๐ฎ 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).
๐ WORK ๐
WORK is COMPLEX*16 array, dimension (2*N).
๐ RWORK ๐
RWORK is DOUBLE PRECISION array, dimension (MAX(1,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.
๐
INFO ๐
okay so INFO is an INTEGER, and itโs basically the exit-tea โ โ hereโs the vibe check:
= 0โ successful exit, slay โจ< 0โ ifINFO = -i, the i-th argument had an illegal value ๐> 0โ ifINFO = i, andiis:<= NโU(i,i)is exactly zero. The factorization has been completed, but the factorUis exactly singular, so the solution and error bounds could not be computed.RCOND = 0is returned. ๐= N+1โUis nonsingular, butRCONDis 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 ofRCONDwould suggest. ๐ซถ
๐ Author ๐
the icons behind this:
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Definition at line 347 of file zgesvx.f.
๐ซถ Author ๐ซถ
Generated automatically by Doxygen for LAPACK from the source code.
okay bestie, thatโs the whole page ๐ source/version realness: LAPACK, Version 3.12.0, and the footer tag is gesvx(3). mwah ๐
๐ฆ where this page comes from
- arch rolling: lapack-doc 3.12.1-2 ยท custom
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms