posvx#
Functions
-
void sposvx(const char *fact, const char *uplo, const INT n, const INT nrhs, f32 *restrict A, const INT lda, f32 *restrict AF, const INT ldaf, char *equed, f32 *restrict S, f32 *restrict B, const INT ldb, f32 *restrict X, const INT ldx, f32 *rcond, f32 *restrict ferr, f32 *restrict berr, f32 *restrict work, INT *restrict iwork, INT *info)#
SPOSVX uses the Cholesky factorization A = U**T*U or A = L*L**T to compute the solution to a real system of linear equations.
where A is anA * X = B
n-by-nsymmetric positive definite matrix and X andBaren-by-nrhsmatrices.Error bounds on the solution and a condition estimate are also provided.
The following steps are performed:
If
fact='E', real scaling factors are computed to equilibrate the system:diag(S)*A*diag(S) * inv(diag(S))*X = diag(S)*B
Whether or not the system will be equilibrated depends on the scaling of the matrix
A, but if equilibration is used,Ais overwritten bydiag(S)*A*diag(S)andBbydiag(S)*B.If
fact='N'or'E', the Cholesky decomposition is used to factor the matrixA(after equilibration iffact='E') as:A = U**T * U, if uplo = 'U', or A = L * L**T, if uplo = 'L',
where U is an upper triangular matrix and L is a lower triangular matrix.
If the leading principal minor of order i is not positive, then the routine returns with
info=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 for X and compute error bounds as described below.The system of equations is solved for X using the factored form of
A.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 X is premultiplied by
diag(S)so that it solves the original system before equilibration.
equedis an input argument iffact='F'; otherwise it is an output argument.Parameters
infact'F':AFcontains the factored form ofA. Ifequed='Y',Ahas been equilibrated with scaling factors given byS;AandAFwill not be modified.'N': The matrixAwill be copied toAFand factored.'E': The matrixAwill be equilibrated if necessary, then copied toAFand factored.
inuplo'U': Upper triangle of A is stored'L': Lower triangle of A is stored
innThe number of linear equations.
n>=0.innrhsThe number of right hand sides.
nrhs>=0.inoutAArray of dimension (
lda,n). On entry, the symmetric matrix A, except iffact='F'andequed='Y', then A must contain the equilibrated matrix diag(S)*A*diag(S). A is not modified iffact='F'or'N', or iffact='E'andequed='N'on exit. On exit, iffact='E'andequed='Y', A is overwritten by diag(S)*A*diag(S).inldaThe leading dimension of the array
A.lda>=max(1,n).inoutAFArray of dimension (
ldaf,n). Iffact='F', an input argument containing the triangular factor U or L from the Cholesky factorization, in the same storage format as A. Iffact='N'or'E', an output argument returning the triangular factor of the (possibly equilibrated) matrix A.inldafThe leading dimension of the array
AF.ldaf>=max(1,n).inoutequed'N': No equilibration (always true iffact='N')'Y': Equilibration was done, i.e., A has been replaced by diag(S) * A * diag(S)
inoutSArray of dimension (
n). The scale factors for A; not accessed ifequed='N'.Sis an input argument iffact='F'; otherwise it is an output argument. Iffact='F'andequed='Y', each element ofSmust be positive.inoutBArray of dimension (
ldb,nrhs). On entry, then-by-nrhsright hand side matrixB. On exit, ifequed='N', B is not modified; ifequed='Y', B is overwritten by diag(S) * B.inldbThe leading dimension of the array
B.ldb>=max(1,n).outXArray of dimension (
ldx,nrhs). Ifinfo=0orinfo=n+1, then-by-nrhssolution matrix X to the original system of equations. Note that ifequed='Y', A and B are modified on exit, and the solution to the equilibrated system is inv(diag(S))*X.inldxThe leading dimension of the array
X.ldx>=max(1,n).outrcondThe estimate of the reciprocal condition number of the matrix A after equilibration (if done).
outferrArray of dimension (
nrhs). The estimated forward error bound for each solution vector.outberrArray of dimension (
nrhs). The componentwise relative backward error of each solution vector.outworkArray of dimension
3*n.outiworkArray of dimension
n.outinfoinfo=0: successful exitinfo<0: ifinfo=-k, the k-th argument had an illegal valueinfo>0: ifinfo=k, andk<=n, the leading principal minor of order k of A is not positive, so the factorization could not be completed, and the solution has not been computed.rcond=0is returned.info=n+1: U is 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 of rcond would suggest.
void sposvx(
const char* fact,
const char* uplo,
const INT n,
const INT nrhs,
f32* restrict A,
const INT lda,
f32* restrict AF,
const INT ldaf,
char* equed,
f32* restrict S,
f32* restrict B,
const INT ldb,
f32* restrict X,
const INT ldx,
f32* rcond,
f32* restrict ferr,
f32* restrict berr,
f32* restrict work,
INT* restrict iwork,
INT* info
);
Functions
-
void dposvx(const char *fact, const char *uplo, const INT n, const INT nrhs, f64 *restrict A, const INT lda, f64 *restrict AF, const INT ldaf, char *equed, f64 *restrict S, f64 *restrict B, const INT ldb, f64 *restrict X, const INT ldx, f64 *rcond, f64 *restrict ferr, f64 *restrict berr, f64 *restrict work, INT *restrict iwork, INT *info)#
DPOSVX uses the Cholesky factorization A = U**T*U or A = L*L**T to compute the solution to a real system of linear equations.
where A is anA * X = B
n-by-nsymmetric positive definite matrix and X andBaren-by-nrhsmatrices.Error bounds on the solution and a condition estimate are also provided.
The following steps are performed:
If
fact='E', real scaling factors are computed to equilibrate the system:diag(S)*A*diag(S) * inv(diag(S))*X = diag(S)*B
Whether or not the system will be equilibrated depends on the scaling of the matrix
A, but if equilibration is used,Ais overwritten bydiag(S)*A*diag(S)andBbydiag(S)*B.If
fact='N'or'E', the Cholesky decomposition is used to factor the matrixA(after equilibration iffact='E') as:A = U**T * U, if uplo = 'U', or A = L * L**T, if uplo = 'L',
where U is an upper triangular matrix and L is a lower triangular matrix.
If the leading principal minor of order i is not positive, then the routine returns with
info=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 for X and compute error bounds as described below.The system of equations is solved for X using the factored form of
A.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 X is premultiplied by
diag(S)so that it solves the original system before equilibration.
equedis an input argument iffact='F'; otherwise it is an output argument.Parameters
infact'F':AFcontains the factored form ofA. Ifequed='Y',Ahas been equilibrated with scaling factors given byS;AandAFwill not be modified.'N': The matrixAwill be copied toAFand factored.'E': The matrixAwill be equilibrated if necessary, then copied toAFand factored.
inuplo'U': Upper triangle of A is stored'L': Lower triangle of A is stored
innThe number of linear equations.
n>=0.innrhsThe number of right hand sides.
nrhs>=0.inoutAArray of dimension (
lda,n). On entry, the symmetric matrix A, except iffact='F'andequed='Y', then A must contain the equilibrated matrix diag(S)*A*diag(S). A is not modified iffact='F'or'N', or iffact='E'andequed='N'on exit. On exit, iffact='E'andequed='Y', A is overwritten by diag(S)*A*diag(S).inldaThe leading dimension of the array
A.lda>=max(1,n).inoutAFArray of dimension (
ldaf,n). Iffact='F', an input argument containing the triangular factor U or L from the Cholesky factorization, in the same storage format as A. Iffact='N'or'E', an output argument returning the triangular factor of the (possibly equilibrated) matrix A.inldafThe leading dimension of the array
AF.ldaf>=max(1,n).inoutequed'N': No equilibration (always true iffact='N')'Y': Equilibration was done, i.e., A has been replaced by diag(S) * A * diag(S)
inoutSArray of dimension (
n). The scale factors for A; not accessed ifequed='N'.Sis an input argument iffact='F'; otherwise it is an output argument. Iffact='F'andequed='Y', each element ofSmust be positive.inoutBArray of dimension (
ldb,nrhs). On entry, then-by-nrhsright hand side matrixB. On exit, ifequed='N', B is not modified; ifequed='Y', B is overwritten by diag(S) * B.inldbThe leading dimension of the array
B.ldb>=max(1,n).outXArray of dimension (
ldx,nrhs). Ifinfo=0orinfo=n+1, then-by-nrhssolution matrix X to the original system of equations. Note that ifequed='Y', A and B are modified on exit, and the solution to the equilibrated system is inv(diag(S))*X.inldxThe leading dimension of the array
X.ldx>=max(1,n).outrcondThe estimate of the reciprocal condition number of the matrix A after equilibration (if done).
outferrArray of dimension (
nrhs). The estimated forward error bound for each solution vector.outberrArray of dimension (
nrhs). The componentwise relative backward error of each solution vector.outworkArray of dimension
3*n.outiworkArray of dimension
n.outinfoinfo=0: successful exitinfo<0: ifinfo=-k, the k-th argument had an illegal valueinfo>0: ifinfo=k, andk<=n, the leading principal minor of order k of A is not positive, so the factorization could not be completed, and the solution has not been computed.rcond=0is returned.info=n+1: U is 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 of rcond would suggest.
void dposvx(
const char* fact,
const char* uplo,
const INT n,
const INT nrhs,
f64* restrict A,
const INT lda,
f64* restrict AF,
const INT ldaf,
char* equed,
f64* restrict S,
f64* restrict B,
const INT ldb,
f64* restrict X,
const INT ldx,
f64* rcond,
f64* restrict ferr,
f64* restrict berr,
f64* restrict work,
INT* restrict iwork,
INT* info
);
Functions
-
void cposvx(const char *fact, const char *uplo, const INT n, const INT nrhs, c64 *restrict A, const INT lda, c64 *restrict AF, const INT ldaf, char *equed, f32 *restrict S, c64 *restrict B, const INT ldb, c64 *restrict X, const INT ldx, f32 *rcond, f32 *restrict ferr, f32 *restrict berr, c64 *restrict work, f32 *restrict rwork, INT *info)#
CPOSVX uses the Cholesky factorization A = U**H*U or A = L*L**H to compute the solution to a complex system of linear equations.
where A is anA * X = B
n-by-nHermitian positive definite matrix and X andBaren-by-nrhsmatrices.Error bounds on the solution and a condition estimate are also provided.
The following steps are performed:
If
fact='E', real scaling factors are computed to equilibrate the system:diag(S)*A*diag(S) * inv(diag(S))*X = diag(S)*B
Whether or not the system will be equilibrated depends on the scaling of the matrix
A, but if equilibration is used,Ais overwritten bydiag(S)*A*diag(S)andBbydiag(S)*B.If
fact='N'or'E', the Cholesky decomposition is used to factor the matrixA(after equilibration iffact='E') as:A = U**H * U, if uplo = 'U', or A = L * L**H, if uplo = 'L',
where U is an upper triangular matrix and L is a lower triangular matrix.
If the leading principal minor of order i is not positive, then the routine returns with
info=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 for X and compute error bounds as described below.The system of equations is solved for X using the factored form of
A.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 X is premultiplied by
diag(S)so that it solves the original system before equilibration.
equedis an input argument iffact='F'; otherwise it is an output argument.Parameters
infact'F':AFcontains the factored form ofA. Ifequed='Y',Ahas been equilibrated with scaling factors given byS;AandAFwill not be modified.'N': The matrixAwill be copied toAFand factored.'E': The matrixAwill be equilibrated if necessary, then copied toAFand factored.
inuplo'U': Upper triangle of A is stored'L': Lower triangle of A is stored
innThe number of linear equations.
n>=0.innrhsThe number of right hand sides.
nrhs>=0.inoutAArray of dimension (
lda,n). On entry, the Hermitian matrix A, except iffact='F'andequed='Y', then A must contain the equilibrated matrix diag(S)*A*diag(S). A is not modified iffact='F'or'N', or iffact='E'andequed='N'on exit. On exit, iffact='E'andequed='Y', A is overwritten by diag(S)*A*diag(S).inldaThe leading dimension of the array
A.lda>=max(1,n).inoutAFArray of dimension (
ldaf,n). Iffact='F', an input argument containing the triangular factor U or L from the Cholesky factorization, in the same storage format as A. Iffact='N'or'E', an output argument returning the triangular factor of the (possibly equilibrated) matrix A.inldafThe leading dimension of the array
AF.ldaf>=max(1,n).inoutequed'N': No equilibration (always true iffact='N')'Y': Equilibration was done, i.e., A has been replaced by diag(S) * A * diag(S)
inoutSArray of dimension (
n). The scale factors for A; not accessed ifequed='N'.Sis an input argument iffact='F'; otherwise it is an output argument. Iffact='F'andequed='Y', each element ofSmust be positive.inoutBArray of dimension (
ldb,nrhs). On entry, then-by-nrhsright hand side matrixB. On exit, ifequed='N', B is not modified; ifequed='Y', B is overwritten by diag(S) * B.inldbThe leading dimension of the array
B.ldb>=max(1,n).outXArray of dimension (
ldx,nrhs). Ifinfo=0orinfo=n+1, then-by-nrhssolution matrix X to the original system of equations. Note that ifequed='Y', A and B are modified on exit, and the solution to the equilibrated system is inv(diag(S))*X.inldxThe leading dimension of the array
X.ldx>=max(1,n).outrcondThe estimate of the reciprocal condition number of the matrix A after equilibration (if done).
outferrArray of dimension (
nrhs). The estimated forward error bound for each solution vector.outberrArray of dimension (
nrhs). The componentwise relative backward error of each solution vector.outworkComplex array of dimension
2*n.outrworkArray of dimension
n.outinfoinfo=0: successful exitinfo<0: ifinfo=-k, the k-th argument had an illegal valueinfo>0: ifinfo=k, andk<=n, the leading principal minor of order k of A is not positive, so the factorization could not be completed, and the solution has not been computed.rcond=0is returned.info=n+1: U is 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 of rcond would suggest.
void cposvx(
const char* fact,
const char* uplo,
const INT n,
const INT nrhs,
c64* restrict A,
const INT lda,
c64* restrict AF,
const INT ldaf,
char* equed,
f32* restrict S,
c64* restrict B,
const INT ldb,
c64* restrict X,
const INT ldx,
f32* rcond,
f32* restrict ferr,
f32* restrict berr,
c64* restrict work,
f32* restrict rwork,
INT* info
);
Functions
-
void zposvx(const char *fact, const char *uplo, const INT n, const INT nrhs, c128 *restrict A, const INT lda, c128 *restrict AF, const INT ldaf, char *equed, f64 *restrict S, c128 *restrict B, const INT ldb, c128 *restrict X, const INT ldx, f64 *rcond, f64 *restrict ferr, f64 *restrict berr, c128 *restrict work, f64 *restrict rwork, INT *info)#
ZPOSVX uses the Cholesky factorization A = U**H*U or A = L*L**H to compute the solution to a complex system of linear equations.
where A is anA * X = B
n-by-nHermitian positive definite matrix and X andBaren-by-nrhsmatrices.Error bounds on the solution and a condition estimate are also provided.
The following steps are performed:
If
fact='E', real scaling factors are computed to equilibrate the system:diag(S)*A*diag(S) * inv(diag(S))*X = diag(S)*B
Whether or not the system will be equilibrated depends on the scaling of the matrix
A, but if equilibration is used,Ais overwritten bydiag(S)*A*diag(S)andBbydiag(S)*B.If
fact='N'or'E', the Cholesky decomposition is used to factor the matrixA(after equilibration iffact='E') as:A = U**H * U, if uplo = 'U', or A = L * L**H, if uplo = 'L',
where U is an upper triangular matrix and L is a lower triangular matrix.
If the leading principal minor of order i is not positive, then the routine returns with
info=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 for X and compute error bounds as described below.The system of equations is solved for X using the factored form of
A.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 X is premultiplied by
diag(S)so that it solves the original system before equilibration.
equedis an input argument iffact='F'; otherwise it is an output argument.Parameters
infact'F':AFcontains the factored form ofA. Ifequed='Y',Ahas been equilibrated with scaling factors given byS;AandAFwill not be modified.'N': The matrixAwill be copied toAFand factored.'E': The matrixAwill be equilibrated if necessary, then copied toAFand factored.
inuplo'U': Upper triangle of A is stored'L': Lower triangle of A is stored
innThe number of linear equations.
n>=0.innrhsThe number of right hand sides.
nrhs>=0.inoutAArray of dimension (
lda,n). On entry, the Hermitian matrix A, except iffact='F'andequed='Y', then A must contain the equilibrated matrix diag(S)*A*diag(S). A is not modified iffact='F'or'N', or iffact='E'andequed='N'on exit. On exit, iffact='E'andequed='Y', A is overwritten by diag(S)*A*diag(S).inldaThe leading dimension of the array
A.lda>=max(1,n).inoutAFArray of dimension (
ldaf,n). Iffact='F', an input argument containing the triangular factor U or L from the Cholesky factorization, in the same storage format as A. Iffact='N'or'E', an output argument returning the triangular factor of the (possibly equilibrated) matrix A.inldafThe leading dimension of the array
AF.ldaf>=max(1,n).inoutequed'N': No equilibration (always true iffact='N')'Y': Equilibration was done, i.e., A has been replaced by diag(S) * A * diag(S)
inoutSArray of dimension (
n). The scale factors for A; not accessed ifequed='N'.Sis an input argument iffact='F'; otherwise it is an output argument. Iffact='F'andequed='Y', each element ofSmust be positive.inoutBArray of dimension (
ldb,nrhs). On entry, then-by-nrhsright hand side matrixB. On exit, ifequed='N', B is not modified; ifequed='Y', B is overwritten by diag(S) * B.inldbThe leading dimension of the array
B.ldb>=max(1,n).outXArray of dimension (
ldx,nrhs). Ifinfo=0orinfo=n+1, then-by-nrhssolution matrix X to the original system of equations. Note that ifequed='Y', A and B are modified on exit, and the solution to the equilibrated system is inv(diag(S))*X.inldxThe leading dimension of the array
X.ldx>=max(1,n).outrcondThe estimate of the reciprocal condition number of the matrix A after equilibration (if done).
outferrArray of dimension (
nrhs). The estimated forward error bound for each solution vector.outberrArray of dimension (
nrhs). The componentwise relative backward error of each solution vector.outworkComplex array of dimension
2*n.outrworkArray of dimension
n.outinfoinfo=0: successful exitinfo<0: ifinfo=-k, the k-th argument had an illegal valueinfo>0: ifinfo=k, andk<=n, the leading principal minor of order k of A is not positive, so the factorization could not be completed, and the solution has not been computed.rcond=0is returned.info=n+1: U is 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 of rcond would suggest.
void zposvx(
const char* fact,
const char* uplo,
const INT n,
const INT nrhs,
c128* restrict A,
const INT lda,
c128* restrict AF,
const INT ldaf,
char* equed,
f64* restrict S,
c128* restrict B,
const INT ldb,
c128* restrict X,
const INT ldx,
f64* rcond,
f64* restrict ferr,
f64* restrict berr,
c128* restrict work,
f64* restrict rwork,
INT* info
);