dsgesv#
Functions
-
void dsgesv(const INT n, const INT nrhs, f64 *restrict A, const INT lda, INT *restrict ipiv, const f64 *restrict B, const INT ldb, f64 *restrict X, const INT ldx, f64 *restrict work, float *restrict swork, INT *iter, INT *info)#
DSGESV computes the solution to a real system of linear equations.
whereA * X = B
Ais ann-by-nmatrix andXandBaren-by-nrhsmatrices.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. If the approach fails the method switches to a DOUBLE PRECISION factorization and solve.
Parameters
innThe number of linear equations, i.e., the order of
A.n>=0.innrhsThe number of right hand sides.
nrhs>=0.inoutAArray of dimension (
lda,n). On entry, then-by-ncoefficient matrixA. On exit, if iterative refinement succeeded (iter>=0),Ais unchanged. If double precision factorization was used (iter<0),Acontains the factors L and U from A = P*L*U.inldaThe leading dimension of
A.lda>=max(1,n).outipivArray of dimension
n. The pivot indices.inBArray of dimension (
ldb,nrhs). Then-by-nrhsright hand side matrixB.inldbThe leading dimension of
B.ldb>=max(1,n).outXArray of dimension (
ldx,nrhs). Ifinfo=0, then-by-nrhssolution matrix X.inldxThe leading dimension of
X.ldx>=max(1,n).outworkDouble precision workspace for residual vectors. Array of dimension (
n,nrhs).outsworkSingle precision workspace for matrix and solutions. Array of dimension
n*(n+nrhs).outiterIteration count:
iter<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 of SGETRF
-31: stop the iterative refinement after the 30th iterations
iter>0: iterative refinement has been successfully used. Returns the number of iterations
outinfoinfo=0: successful exitinfo<0: ifinfo=-i, argument i had an illegal valueinfo>0: ifinfo=i, U(i,i) is exactly zero
void dsgesv(
const INT n,
const INT nrhs,
f64* restrict A,
const INT lda,
INT* restrict ipiv,
const f64* restrict B,
const INT ldb,
f64* restrict X,
const INT ldx,
f64* restrict work,
float* restrict swork,
INT* iter,
INT* info
);