DSGESV(3)
π DSGESV(3) β dsgesv.f(3) from the Library Functions Manual π
Okay bestie, welcome to your fave LAPACK mixed-precision moment. The manual name is literally dsgesv.f(3) and this whole thing is serving group-chat energy with every fact intact.
π NAME π
This page is for the file:
/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/dsgesv.f
That's it. That's the name. Slay.
β¨ SYNOPSIS β¨
π«Ά Functions/Subroutines π«Ά
subroutine DSGESV (n, nrhs, a, lda, ipiv, b, ldb, x, ldx, work, swork,
iter, info)
DSGESV computes the solution to system of linear equations A * X = B for GE matrices (mixed precision with iterative refinement). Yes ma'am, mixed precision and iterative refinement in one routine.
π Function/Subroutine Documentation π
subroutine DSGESV (integer n, integer nrhs, double precision, dimension(
lda, * ) a, integer lda, integer, dimension( * ) ipiv, double precision,
dimension( ldb, * ) b, integer ldb, double precision, dimension( ldx, *
) x, integer ldx, double precision, dimension( n, * ) work, real,
dimension( * ) swork, integer iter, integer info)
DSGESV computes the solution to system of linear equations A * X = B for GE matrices (mixed precision with iterative refinement).
π Purpose π
Okay so here's the plot: DSGESV computes 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. Important distinction, bestie.
First it tries to factorize the matrix in SINGLE PRECISION and then use that factorization inside an iterative refinement procedure. The goal? A solution with DOUBLE PRECISION normwise backward error quality (see below). If that approach fails, it switches to a DOUBLE PRECISION factorization and solve. No drama, just fallback.
Real talk: iterative refinement is not going to be a winning strategy if the ratio
SINGLE PRECISION performance over DOUBLE PRECISION performance
is too small. A reasonable strategy should take the number of right-hand sides and the size of the matrix into account. This might be done with a call to ILAENV in the future. Up to now, we always try iterative refinement. Always. Periodt.
The iterative refinement process is stopped if
ITER > ITERMAX
or for all the RHS we have:
RNRM < SQRT(N)*XNRM*ANRM*EPS*BWDMAX
where:
ITERis the number of the current iteration in the iterative refinement processRNRMis the infinity-norm of the residualXNRMis the infinity-norm of the solutionANRMis the infinity-operator-norm of the matrixAEPSis the machine epsilon returned byDLAMCH('Epsilon')
The value ITERMAX and BWDMAX are fixed to 30 and 1.0D+00 respectively. Cute constants, honestly.
πΈ Parameters πΈ
NβNisINTEGER. The number of linear equations, i.e., the order of the matrixA.N >= 0. Zero is allowed, bestie.NRHSβNRHSisINTEGER. The number of right hand sides, i.e., the number of columns of the matrixB.NRHS >= 0.AβAisDOUBLE PRECISIONarray, dimension(LDA,N). On entry, theN-by-Ncoefficient matrixA. On exit: if iterative refinement has been successfully used (INFO = 0andITER >= 0, see description below), thenAis unchanged. If double precision factorization has been used (INFO = 0andITER < 0, see description below), then the arrayAcontains the factorsLandUfrom the factorizationA = P*L*U; the unit diagonal elements ofLare not stored. So yes,Acan get a whole new personality on exit.LDAβLDAisINTEGER. The leading dimension of the arrayA.LDA >= max(1,N).IPIVβIPIVisINTEGERarray, dimension(N). The pivot indices that define the permutation matrixP; rowiof the matrix was interchanged with rowIPIV(i). Corresponds either to the single precision factorization (ifINFO = 0andITER >= 0) or the double precision factorization (ifINFO = 0andITER < 0). Pivot tea π«.BβBisDOUBLE PRECISIONarray, dimension(LDB,NRHS). TheN-by-NRHSright hand side matrixB.LDBβLDBisINTEGER. The leading dimension of the arrayB.LDB >= max(1,N).XβXisDOUBLE PRECISIONarray, dimension(LDX,NRHS). IfINFO = 0, theN-by-NRHSsolution matrixX. This is the moment.LDXβLDXisINTEGER. The leading dimension of the arrayX.LDX >= max(1,N).WORKβWORKisDOUBLE PRECISIONarray, dimension(N,NRHS). This array is used to hold the residual vectors. It's literally holding the receipts.SWORKβSWORKisREALarray, dimension(N*(N+NRHS)). This array is used to use the single precision matrix and the right-hand sides or solutions in single precision. Single-precision storage, doing its supporting-character job.ITERβITERisINTEGER. The vibe check on iterative refinement:< 0: iterative refinement has failed, double precision factorization has been performed.-1: the routine fell back to full precision for implementation- or machine-specific reasons-2: narrowing the precision induced an overflow, the routine fell back to full precision-3: failure ofSGETRF-31: stop the iterative refinement after the 30th iterations
> 0: iterative refinement has been successfully used. Returns the number of iterations.
INFOβINFOisINTEGER. Exit status tea:= 0: successful exit< 0: ifINFO = -i, thei-th argument had an illegal value> 0: ifINFO = i,U(i,i)computed inDOUBLE PRECISIONis exactly zero. The factorization has been completed, but the factorUis exactly singular, so the solution could not be computed. Not the slay we wanted π.
π¦ Author π¦
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π§ Definition at line π§
Definition at line 193 of file dsgesv.f. That's the exact line, bestie, no guessing.
π« Author (the auto-generated one) π«
Generated automatically by Doxygen for LAPACK from the source code. So yes, the docs also have main-character energy from a machine.
Sign-off: this page is from LAPACK Version 3.12.0, and the footer path is /home/abui...RC/dsgesv.f(3). The date? Not printed on the page, so I'm not inventing one β consider this your cute little footer moment instead: stay precise, check your LDA, and may your U never be exactly singular πβ¨π
π¦ 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