SGESVX(3)
Okay so this is SGESVX(3) from the Library Functions Manual, and the header is literally /home/abui...RC/sgesvx.f(3), then the manual name, then /home/abui...RC/sgesvx.f(3) again β a little header echo, we love that for us π
. The actual source file path is /home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/sgesvx.f, bestie.
πΈ NAME
/home/abui...RC/sgesvx.f(3) β that's the name-ish path on this page. The source file is /home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/sgesvx.f.
β¨ SYNOPSIS β¨
π§ Functions/Subroutines
subroutine 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 matrices. No cap.
π₯ Function/Subroutine Documentation π₯
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. Obsessed, honestly. π
π¦ Description
The following steps are performed:
- If
FACT = 'E', real scaling factors are computed to equilibrate the system. The formulas are:
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. So, warning bestie, not a full stop. β οΈ - 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βREALarray, 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βINTEGER. The leading dimension of the arrayA.LDA >= max(1,N).AFβREALarray, dimension(LDAF,N). IfFACT = '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. 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β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 bySGETRF; 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βCHARACTER*1. 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βREALarray, 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βREALarray, 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βREALarray, dimension(LDB,NRHS). On entry, theN-by-NRHSright hand side matrixB. On exit, ifEQUED = 'N',Bis not modified; ifTRANS = 'N'andEQUED = 'R'or'B',Bis overwritten bydiag(R)*B; ifTRANS = 'T'or'C'andEQUED = 'C'or'B',Bis overwritten bydiag(C)*B.LDBβINTEGER. The leading dimension of the arrayB.LDB >= max(1,N).XβREALarray, 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βINTEGER. The leading dimension of the arrayX.LDX >= max(1,N).RCONDβ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
Okay so weβre deep in the output-argument era now, and these are the little receipts SGESVX hands back after it does its thing. Stay with me, bestie β itβs all facts, just with better vibes. π
π FERR
FERR is a REAL array, dimension (NRHS). Itβs the estimated forward error bound for each solution vector X(j) β aka the j-th column of the solution matrix X.
If XTRUE is the true solution corresponding to X(j), then 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). Math but make it fashion β¨
The estimate is as reliable as the estimate for RCOND, and is almost always a slight overestimate of the true error.
π¦ BERR
BERR is a REAL array, dimension (NRHS). Itβs 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.
Backward error? More like backward bestie energy. π«Ά
π WORK
WORK is a REAL array, dimension (MAX(1,4*N)).
On exit, WORK(1) contains the reciprocal pivot growth factor norm(A)/norm(U). The norm is used.
If WORK(1) is much less than 1, then the stability of the LU factorization of the (equilibrated) matrix A could be poor. This also means that the solution X, condition estimator RCOND, and forward error bound FERR could be unreliable. Red-flag energy, ngl π©
If factorization fails with 0<INFO<=N, then WORK(1) contains the reciprocal pivot growth factor for the leading INFO columns of A.
πΈ IWORK
IWORK is an INTEGER array, dimension (N).
Thatβs it. Thatβs the whole vibe. π
π INFO
INFO is an INTEGER. Itβs basically the exit-status main character of this whole situation:
= 0: successful exit. We love a clean return. β< 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. Singular? Not the slay we wanted. π= 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. Plot twist: still computed. π
β¨ Author
These are the credited legends:
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Definition at line 346 of file sgesvx.f.
π Author
Generated automatically by Doxygen for LAPACK from the source code.
Thatβs the whole page, bestie β the footer is serving LAPACK Version 3.12.0 and the source path /home/abui...RC/sgesvx.f(3). Slay responsibly, and may all your factorizations be nonsingular. πβ¨
π¦ where this page comes from
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms