gbsvx#
Functions
-
void sgbsvx(const char *fact, const char *trans, const INT n, const INT kl, const INT ku, const INT nrhs, f32 *restrict AB, const INT ldab, f32 *restrict AFB, const INT ldafb, INT *restrict ipiv, char *equed, f32 *restrict R, f32 *restrict C, 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)#
SGBSVX uses the LU factorization to compute the solution to a real system of linear equations.
where A is a band matrix of orderA * X = B, A**T * X = B, or A**H * X = B
nwithklsubdiagonals andkusuperdiagonals, and X andBaren-by-nrhsmatrices.Error bounds on the solution and a condition estimate are also provided.
The following steps are performed by this subroutine:
If
fact='E', real scaling factors are computed to equilibrate the system:trans = 'N': diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B trans = 'T': (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B trans = 'C': (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
Whether or not the system will be equilibrated depends on the scaling of the matrix A, but if equilibration is used, A is overwritten by diag(R)*A*diag(C) and B by diag(R)*B (if
trans='N') or diag(C)*B (iftrans='T'or'C').If
fact='N'or'E', the LU decomposition is used to factor the matrix A (after equilibration iffact='E') as:A = L * U
where L is a product of permutation and unit lower triangular matrices with kl subdiagonals, and U is upper triangular with kl+ku superdiagonals.
If some
U(i,i)=0, so that U is exactly singular, then the routine returns withinfo=i. Otherwise, the factored form of A is used to estimate the condition number of the matrix A. 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(C)(iftrans='N') ordiag(R)(iftrans='T'or'C') so that it solves the original system before equilibration.
Parameters
infact'F':AFBandipivcontain the factored form of A.'N': The matrix A will be copied toAFBand factored.'E': The matrix A will be equilibrated if necessary, then copied toAFBand factored.
intrans'N': A * X = B (No transpose)'T': A**T * X = B (Transpose)'C': A**H * X = B (Conjugate transpose = Transpose)
innThe number of linear equations (order of A).
n>=0.inklThe number of subdiagonals within the band of A.
kl>=0.inkuThe number of superdiagonals within the band of A.
ku>=0.innrhsThe number of right hand sides.
nrhs>=0.inoutABArray of dimension (
ldab,n). On entry, the matrix A in band storage, in rows 0 tokl+ku. The j-th column of A is stored in the j-th column of the arrayABas follows:AB[ku+i-j + j*ldab] = A(i,j)formax(0,j-ku)<=i<=min(n-1,j+kl). On exit, ifequed != 'N', A is scaled.inldabThe leading dimension of
AB.ldab>=kl+ku+1.inoutAFBArray of dimension (
ldafb,n). On entry (iffact='F'), contains the LU factors. On exit, contains the factors L and U.inldafbThe leading dimension of
AFB.ldafb>=2*kl+ku+1.inoutipivArray of dimension (
n). Pivot indices from factorization.inoutequedOn entry (if
fact='F'), specifies equilibration done. On exit, specifies the form of equilibration:'N': No equilibration'R': Row equilibration (A := diag(R) * A)'C': Column equilibration (A := A * diag(C))'B': Both (A := diag(R) * A * diag(C))
inoutRArray of dimension (
n). Row scale factors.inoutCArray of dimension (
n). Column scale factors.inoutBArray of dimension (
ldb,nrhs). On entry, then-by-nrhsright hand side matrixB. On exit, if equilibration was done,Bis scaled.inldbThe leading dimension of
B.ldb>=max(1,n).outXArray of dimension (
ldx,nrhs). Then-by-nrhssolution matrix X.inldxThe leading dimension of
X.ldx>=max(1,n).outrcondReciprocal condition number estimate.
outferrArray of dimension (
nrhs). Forward error bound for each solution vector.outberrArray of dimension (
nrhs). Backward error for each solution vector.outworkWorkspace array of dimension (
3*n). On exit,work[0]contains the reciprocal pivot growth factor.outiworkInteger workspace array of dimension (
n).outinfoinfo=0: successful exitinfo<0: ifinfo=-i, the i-th argument had an illegal valueinfo>0: ifinfo=i, U(i,i) is exactly zero (1-based). Ifinfo=n+1, U is nonsingular butrcond< machine precision.
void sgbsvx(
const char* fact,
const char* trans,
const INT n,
const INT kl,
const INT ku,
const INT nrhs,
f32* restrict AB,
const INT ldab,
f32* restrict AFB,
const INT ldafb,
INT* restrict ipiv,
char* equed,
f32* restrict R,
f32* restrict C,
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 dgbsvx(const char *fact, const char *trans, const INT n, const INT kl, const INT ku, const INT nrhs, f64 *restrict AB, const INT ldab, f64 *restrict AFB, const INT ldafb, INT *restrict ipiv, char *equed, f64 *restrict R, f64 *restrict C, 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)#
DGBSVX uses the LU factorization to compute the solution to a real system of linear equations.
where A is a band matrix of orderA * X = B, A**T * X = B, or A**H * X = B
nwithklsubdiagonals andkusuperdiagonals, and X andBaren-by-nrhsmatrices.Error bounds on the solution and a condition estimate are also provided.
The following steps are performed by this subroutine:
If
fact='E', real scaling factors are computed to equilibrate the system:trans = 'N': diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B trans = 'T': (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B trans = 'C': (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
Whether or not the system will be equilibrated depends on the scaling of the matrix A, but if equilibration is used, A is overwritten by diag(R)*A*diag(C) and B by diag(R)*B (if
trans='N') or diag(C)*B (iftrans='T'or'C').If
fact='N'or'E', the LU decomposition is used to factor the matrix A (after equilibration iffact='E') as:A = L * U
where L is a product of permutation and unit lower triangular matrices with kl subdiagonals, and U is upper triangular with kl+ku superdiagonals.
If some
U(i,i)=0, so that U is exactly singular, then the routine returns withinfo=i. Otherwise, the factored form of A is used to estimate the condition number of the matrix A. 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(C)(iftrans='N') ordiag(R)(iftrans='T'or'C') so that it solves the original system before equilibration.
Parameters
infact'F':AFBandipivcontain the factored form of A.'N': The matrix A will be copied toAFBand factored.'E': The matrix A will be equilibrated if necessary, then copied toAFBand factored.
intrans'N': A * X = B (No transpose)'T': A**T * X = B (Transpose)'C': A**H * X = B (Conjugate transpose = Transpose)
innThe number of linear equations (order of A).
n>=0.inklThe number of subdiagonals within the band of A.
kl>=0.inkuThe number of superdiagonals within the band of A.
ku>=0.innrhsThe number of right hand sides.
nrhs>=0.inoutABArray of dimension (
ldab,n). On entry, the matrix A in band storage, in rows 0 tokl+ku. The j-th column of A is stored in the j-th column of the arrayABas follows:AB[ku+i-j + j*ldab] = A(i,j)formax(0,j-ku)<=i<=min(n-1,j+kl). On exit, ifequed != 'N', A is scaled.inldabThe leading dimension of
AB.ldab>=kl+ku+1.inoutAFBArray of dimension (
ldafb,n). On entry (iffact='F'), contains the LU factors. On exit, contains the factors L and U.inldafbThe leading dimension of
AFB.ldafb>=2*kl+ku+1.inoutipivArray of dimension (
n). Pivot indices from factorization.inoutequedOn entry (if
fact='F'), specifies equilibration done. On exit, specifies the form of equilibration:'N': No equilibration'R': Row equilibration (A := diag(R) * A)'C': Column equilibration (A := A * diag(C))'B': Both (A := diag(R) * A * diag(C))
inoutRArray of dimension (
n). Row scale factors.inoutCArray of dimension (
n). Column scale factors.inoutBArray of dimension (
ldb,nrhs). On entry, then-by-nrhsright hand side matrixB. On exit, if equilibration was done,Bis scaled.inldbThe leading dimension of
B.ldb>=max(1,n).outXArray of dimension (
ldx,nrhs). Then-by-nrhssolution matrix X.inldxThe leading dimension of
X.ldx>=max(1,n).outrcondReciprocal condition number estimate.
outferrArray of dimension (
nrhs). Forward error bound for each solution vector.outberrArray of dimension (
nrhs). Backward error for each solution vector.outworkWorkspace array of dimension (
3*n). On exit,work[0]contains the reciprocal pivot growth factor.outiworkInteger workspace array of dimension (
n).outinfoinfo=0: successful exitinfo<0: ifinfo=-i, the i-th argument had an illegal valueinfo>0: ifinfo=i, U(i,i) is exactly zero (1-based). Ifinfo=n+1, U is nonsingular butrcond< machine precision.
void dgbsvx(
const char* fact,
const char* trans,
const INT n,
const INT kl,
const INT ku,
const INT nrhs,
f64* restrict AB,
const INT ldab,
f64* restrict AFB,
const INT ldafb,
INT* restrict ipiv,
char* equed,
f64* restrict R,
f64* restrict C,
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 cgbsvx(const char *fact, const char *trans, const INT n, const INT kl, const INT ku, const INT nrhs, c64 *restrict AB, const INT ldab, c64 *restrict AFB, const INT ldafb, INT *restrict ipiv, char *equed, f32 *restrict R, f32 *restrict C, 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)#
CGBSVX uses the LU factorization to compute the solution to a complex system of linear equations.
where A is a band matrix of orderA * X = B, A**T * X = B, or A**H * X = B
nwithklsubdiagonals andkusuperdiagonals, and X andBaren-by-nrhsmatrices.Error bounds on the solution and a condition estimate are also provided.
The following steps are performed by this subroutine:
If
fact='E', real scaling factors are computed to equilibrate the system:trans = 'N': diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B trans = 'T': (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B trans = 'C': (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
Whether or not the system will be equilibrated depends on the scaling of the matrix A, but if equilibration is used, A is overwritten by diag(R)*A*diag(C) and B by diag(R)*B (if
trans='N') or diag(C)*B (iftrans='T'or'C').If
fact='N'or'E', the LU decomposition is used to factor the matrix A (after equilibration iffact='E') as:A = L * U
where L is a product of permutation and unit lower triangular matrices with kl subdiagonals, and U is upper triangular with kl+ku superdiagonals.
If some
U(i,i)=0, so that U is exactly singular, then the routine returns withinfo=i. Otherwise, the factored form of A is used to estimate the condition number of the matrix A. 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(C)(iftrans='N') ordiag(R)(iftrans='T'or'C') so that it solves the original system before equilibration.
Parameters
infact'F':AFBandipivcontain the factored form of A.'N': The matrix A will be copied toAFBand factored.'E': The matrix A will be equilibrated if necessary, then copied toAFBand factored.
intrans'N': A * X = B (No transpose)'T': A**T * X = B (Transpose)'C': A**H * X = B (Conjugate transpose)
innThe number of linear equations (order of A).
n>=0.inklThe number of subdiagonals within the band of A.
kl>=0.inkuThe number of superdiagonals within the band of A.
ku>=0.innrhsThe number of right hand sides.
nrhs>=0.inoutABArray of dimension (
ldab,n). On entry, the matrix A in band storage, in rows 0 tokl+ku. The j-th column of A is stored in the j-th column of the arrayABas follows:AB[ku+i-j + j*ldab] = A(i,j)formax(0,j-ku)<=i<=min(n-1,j+kl). On exit, ifequed != 'N', A is scaled.inldabThe leading dimension of
AB.ldab>=kl+ku+1.inoutAFBArray of dimension (
ldafb,n). On entry (iffact='F'), contains the LU factors. On exit, contains the factors L and U.inldafbThe leading dimension of
AFB.ldafb>=2*kl+ku+1.inoutipivArray of dimension (
n). Pivot indices from factorization.inoutequedOn entry (if
fact='F'), specifies equilibration done. On exit, specifies the form of equilibration:'N': No equilibration'R': Row equilibration (A := diag(R) * A)'C': Column equilibration (A := A * diag(C))'B': Both (A := diag(R) * A * diag(C))
inoutRArray of dimension (
n). Row scale factors.inoutCArray of dimension (
n). Column scale factors.inoutBArray of dimension (
ldb,nrhs). On entry, then-by-nrhsright hand side matrixB. On exit, if equilibration was done,Bis scaled.inldbThe leading dimension of
B.ldb>=max(1,n).outXArray of dimension (
ldx,nrhs). Then-by-nrhssolution matrix X.inldxThe leading dimension of
X.ldx>=max(1,n).outrcondReciprocal condition number estimate.
outferrArray of dimension (
nrhs). Forward error bound for each solution vector.outberrArray of dimension (
nrhs). Backward error for each solution vector.outworkComplex workspace array of dimension (
2*n).outrworkReal workspace array of dimension (
max(1,n)). On exit,rwork[0]contains the reciprocal pivot growth factor.outinfoinfo=0: successful exitinfo<0: ifinfo=-i, the i-th argument had an illegal valueinfo>0: ifinfo=i, U(i,i) is exactly zero (1-based). Ifinfo=n+1, U is nonsingular butrcond< machine precision.
void cgbsvx(
const char* fact,
const char* trans,
const INT n,
const INT kl,
const INT ku,
const INT nrhs,
c64* restrict AB,
const INT ldab,
c64* restrict AFB,
const INT ldafb,
INT* restrict ipiv,
char* equed,
f32* restrict R,
f32* restrict C,
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 zgbsvx(const char *fact, const char *trans, const INT n, const INT kl, const INT ku, const INT nrhs, c128 *restrict AB, const INT ldab, c128 *restrict AFB, const INT ldafb, INT *restrict ipiv, char *equed, f64 *restrict R, f64 *restrict C, 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)#
ZGBSVX uses the LU factorization to compute the solution to a complex system of linear equations.
where A is a band matrix of orderA * X = B, A**T * X = B, or A**H * X = B
nwithklsubdiagonals andkusuperdiagonals, and X andBaren-by-nrhsmatrices.Error bounds on the solution and a condition estimate are also provided.
The following steps are performed by this subroutine:
If
fact='E', real scaling factors are computed to equilibrate the system:trans = 'N': diag(R)*A*diag(C) *inv(diag(C))*X = diag(R)*B trans = 'T': (diag(R)*A*diag(C))**T *inv(diag(R))*X = diag(C)*B trans = 'C': (diag(R)*A*diag(C))**H *inv(diag(R))*X = diag(C)*B
Whether or not the system will be equilibrated depends on the scaling of the matrix A, but if equilibration is used, A is overwritten by diag(R)*A*diag(C) and B by diag(R)*B (if
trans='N') or diag(C)*B (iftrans='T'or'C').If
fact='N'or'E', the LU decomposition is used to factor the matrix A (after equilibration iffact='E') as:A = L * U
where L is a product of permutation and unit lower triangular matrices with kl subdiagonals, and U is upper triangular with kl+ku superdiagonals.
If some
U(i,i)=0, so that U is exactly singular, then the routine returns withinfo=i. Otherwise, the factored form of A is used to estimate the condition number of the matrix A. 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(C)(iftrans='N') ordiag(R)(iftrans='T'or'C') so that it solves the original system before equilibration.
Parameters
infact'F':AFBandipivcontain the factored form of A.'N': The matrix A will be copied toAFBand factored.'E': The matrix A will be equilibrated if necessary, then copied toAFBand factored.
intrans'N': A * X = B (No transpose)'T': A**T * X = B (Transpose)'C': A**H * X = B (Conjugate transpose)
innThe number of linear equations (order of A).
n>=0.inklThe number of subdiagonals within the band of A.
kl>=0.inkuThe number of superdiagonals within the band of A.
ku>=0.innrhsThe number of right hand sides.
nrhs>=0.inoutABArray of dimension (
ldab,n). On entry, the matrix A in band storage, in rows 0 tokl+ku. The j-th column of A is stored in the j-th column of the arrayABas follows:AB[ku+i-j + j*ldab] = A(i,j)formax(0,j-ku)<=i<=min(n-1,j+kl). On exit, ifequed != 'N', A is scaled.inldabThe leading dimension of
AB.ldab>=kl+ku+1.inoutAFBArray of dimension (
ldafb,n). On entry (iffact='F'), contains the LU factors. On exit, contains the factors L and U.inldafbThe leading dimension of
AFB.ldafb>=2*kl+ku+1.inoutipivArray of dimension (
n). Pivot indices from factorization.inoutequedOn entry (if
fact='F'), specifies equilibration done. On exit, specifies the form of equilibration:'N': No equilibration'R': Row equilibration (A := diag(R) * A)'C': Column equilibration (A := A * diag(C))'B': Both (A := diag(R) * A * diag(C))
inoutRArray of dimension (
n). Row scale factors.inoutCArray of dimension (
n). Column scale factors.inoutBArray of dimension (
ldb,nrhs). On entry, then-by-nrhsright hand side matrixB. On exit, if equilibration was done,Bis scaled.inldbThe leading dimension of
B.ldb>=max(1,n).outXArray of dimension (
ldx,nrhs). Then-by-nrhssolution matrix X.inldxThe leading dimension of
X.ldx>=max(1,n).outrcondReciprocal condition number estimate.
outferrArray of dimension (
nrhs). Forward error bound for each solution vector.outberrArray of dimension (
nrhs). Backward error for each solution vector.outworkComplex workspace array of dimension (
2*n).outrworkReal workspace array of dimension (
max(1,n)). On exit,rwork[0]contains the reciprocal pivot growth factor.outinfoinfo=0: successful exitinfo<0: ifinfo=-i, the i-th argument had an illegal valueinfo>0: ifinfo=i, U(i,i) is exactly zero (1-based). Ifinfo=n+1, U is nonsingular butrcond< machine precision.
void zgbsvx(
const char* fact,
const char* trans,
const INT n,
const INT kl,
const INT ku,
const INT nrhs,
c128* restrict AB,
const INT ldab,
c128* restrict AFB,
const INT ldafb,
INT* restrict ipiv,
char* equed,
f64* restrict R,
f64* restrict C,
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
);