SRC/dsgesv.f(3)
π
SRC/dsgesv.f(3) β Library Functions Manual β¨
okay so bestie, this is the SRC/dsgesv.f(3) page from the Library Functions Manual, and itβs giving βmixed precision with iterative refinementβ in the most iconic way. letβs get into it π
π NAME π
SRC/dsgesv.f
β¨ 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 equationsA * X = Bfor GE matrices (mixed precision with iterative refinement)
subroutine dsgesv (n, nrhs, a, lda, ipiv, b, ldb, x, ldx, work, swork,
iter, info)
πΈ 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 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.
DSGESV first attempts to factorize the matrix in SINGLE PRECISION and use this factorization within an iterative refinement procedure to produce a solution with DOUBLE PRECISION normwise backward error quality (see below). If the approach fails the method switches to a DOUBLE PRECISION factorization and solve.
ngl, the iterative refinement is not going to be a winning strategy if the ratio SINGLE PRECISION performance over DOUBLE PRECISION performance is too small. A reasonable strategy should take the number of 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.
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.
π§Ύ Parameters
NβN is INTEGERThe number of linear equations, i.e., the order of the matrixA.N >= 0.NRHSβNRHS is INTEGERThe number of right hand sides, i.e., the number of columns of the matrixB.NRHS >= 0.AβA is DOUBLE PRECISION array, 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.LDAβLDA is INTEGERThe leading dimension of the arrayA.LDA >= max(1,N).IPIVβIPIV is INTEGER array, 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).BβB is DOUBLE PRECISION array, dimension (LDB,NRHS)TheN-by-NRHSright hand side matrixB.LDBβLDB is INTEGERThe leading dimension of the arrayB.LDB >= max(1,N).XβX is DOUBLE PRECISION array, dimension (LDX,NRHS)IfINFO = 0, theN-by-NRHSsolution matrixX.LDXβLDX is INTEGERThe leading dimension of the arrayX.LDX >= max(1,N).WORKβWORK is DOUBLE PRECISION array, dimension (N,NRHS)This array is used to hold the residual vectors.SWORKβSWORK is REAL array, dimension (N*(N+NRHS))This array is used to use the single precision matrix and the right-hand sides or solutions in single precision.ITERβITER is INTEGER< 0: iterative refinement has failed, double precision factorization has been performed-1: the routine fell back to full precision for implementation- or 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βINFO is INTEGER= 0: successful exit< 0: ifINFO = -i, the i-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.
π Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Definition at line 193 of file dsgesv.f.
π Author
Generated automatically by Doxygen for LAPACK from the source code.
π cute sign-off: this page is from LAPACK Version 3.12.0, source file SRC/dsgesv.f(3) β byeeee bestie, slay responsibly! π
β¨
π¦ 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