zcgesv#
Functions
-
void zcgesv(const INT n, const INT nrhs, c128 *restrict A, const INT lda, INT *restrict ipiv, const c128 *restrict B, const INT ldb, c128 *restrict X, const INT ldx, c128 *restrict work, c64 *restrict swork, f64 *restrict rwork, INT *iter, INT *info)#
ZCGESV computes the solution to a complex system of linear equations.
whereA * X = B
Ais ann-by-nmatrix andXandBaren-by-nrhsmatrices.ZCGESV first attempts to factorize the matrix in COMPLEX and use this factorization within an iterative refinement procedure to produce a solution with COMPLEX*16 normwise backward error quality (see below). If the approach fails the method switches to a COMPLEX*16 factorization and solve.
The iterative refinement process is stopped if:
ITER > ITERMAX
or for all the RHS we have:
RNRM < SQRT(N)*XNRM*ANRM*EPS*BWDMAX
where
ITER is the number of the current iteration in the iterative refinement process
RNRM is the infinity-norm of the residual
XNRM is the infinity-norm of the solution
ANRM is the infinity-operator-norm of the matrix
AEPS is the machine epsilon returned by DLAMCH(‘Epsilon’)
The value ITERMAX and BWDMAX are fixed to 30 and 1.0D+00 respectively.
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 COMPLEX*16 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).outworkComplex*16 workspace for residual vectors. Array of dimension (
n,nrhs).outsworkComplex (single precision) workspace for matrix and solutions. Array of dimension
n*(n+nrhs).outrworkDouble precision array, dimension (
n).outiterIteration count:
iter<0: iterative refinement has failed, COMPLEX*16 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 CGETRF
-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 zcgesv(
const INT n,
const INT nrhs,
c128* restrict A,
const INT lda,
INT* restrict ipiv,
const c128* restrict B,
const INT ldb,
c128* restrict X,
const INT ldx,
c128* restrict work,
c64* restrict swork,
f64* restrict rwork,
INT* iter,
INT* info
);