hesv#
Functions
-
void chesv(const char *uplo, const INT n, const INT nrhs, c64 *restrict A, const INT lda, INT *restrict ipiv, c64 *restrict B, const INT ldb, c64 *restrict work, const INT lwork, INT *info)#
CHESV computes the solution to a complex system of linear equations A * X = B, where A is an N-by-N Hermitian matrix and X and B are N-by-NRHS matrices.
The diagonal pivoting method is used to factor A as A = U * D * U**H, if uplo = ‘U’, or A = L * D * L**H, if uplo = ‘L’, where U (or L) is a product of permutation and unit upper (lower) triangular matrices, and D is Hermitian and block diagonal with 1-by-1 and 2-by-2 diagonal blocks. The factored form of A is then used to solve the system of equations A * X = B.
Parameters
inuplo'U': Upper triangle of A is stored'L': Lower triangle of A is stored
innThe number of linear equations, i.e., the order of the matrix A.
n>=0.innrhsThe number of right hand sides, i.e., the number of columns of the matrix B.
nrhs>=0.inoutAArray of dimension
(lda,n). On entry, the Hermitian matrix A. Ifuplo='U', the leadingn-by-nupper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. Ifuplo='L', the leadingn-by-nlower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit, ifinfo=0, the block diagonal matrix D and the multipliers used to obtain the factor U or L from the factorization A = U*D*U**H or A = L*D*L**H as computed bychetrf.inldaThe leading dimension of the array A.
lda>=max(1,n).outipivArray of dimension
n. Pivot indices (0-based). Ifipiv[k]>=0: rows/columnskandipiv[k]were interchanged,D(k,k)is a 1-by-1 block. Ifipiv[k]<0(upper): rows/columnsk-1and-ipiv[k]-1were interchanged,D(k-1:k,k-1:k)is a 2-by-2 block, andipiv[k-1]=ipiv[k]. Ifipiv[k]<0(lower): rows/columnsk+1and-ipiv[k]-1were interchanged,D(k:k+1,k:k+1)is a 2-by-2 block, andipiv[k+1]=ipiv[k].inoutBArray of dimension
(ldb,nrhs). On entry, then-by-nrhsright hand side matrix B. On exit, ifinfo=0, then-by-nrhssolution matrix X.inldbThe leading dimension of the array B.
ldb>=max(1,n).outworkArray of dimension
max(1,lwork). On exit, ifinfo=0,work[0]returns the optimallwork.inlworkThe length of
work.lwork>=1, and for best performancelwork>=n*nb, wherenbis the optimal block size forchetrf. Forlwork<n, TRS will be done with Level BLAS 2; forlwork>=n, TRS will be done with Level BLAS 3. Iflwork=-1, then a workspace query is assumed; the routine only calculates the optimal size of theworkarray, returns this value as the first entry of theworkarray, and no error message related tolworkis issued.outinfoinfo=0: successful exitinfo<0: ifinfo=-i, the i-th argument had an illegal valueinfo>0: ifinfo=i,D(i,i)is exactly zero. The factorization has been completed, but the block diagonal matrix D is exactly singular, so the solution could not be computed.
void chesv(
const char* uplo,
const INT n,
const INT nrhs,
c64* restrict A,
const INT lda,
INT* restrict ipiv,
c64* restrict B,
const INT ldb,
c64* restrict work,
const INT lwork,
INT* info
);
Functions
-
void zhesv(const char *uplo, const INT n, const INT nrhs, c128 *restrict A, const INT lda, INT *restrict ipiv, c128 *restrict B, const INT ldb, c128 *restrict work, const INT lwork, INT *info)#
ZHESV computes the solution to a complex system of linear equations A * X = B, where A is an N-by-N Hermitian matrix and X and B are N-by-NRHS matrices.
The diagonal pivoting method is used to factor A as A = U * D * U**H, if uplo = ‘U’, or A = L * D * L**H, if uplo = ‘L’, where U (or L) is a product of permutation and unit upper (lower) triangular matrices, and D is Hermitian and block diagonal with 1-by-1 and 2-by-2 diagonal blocks. The factored form of A is then used to solve the system of equations A * X = B.
Parameters
inuplo'U': Upper triangle of A is stored'L': Lower triangle of A is stored
innThe number of linear equations, i.e., the order of the matrix A.
n>=0.innrhsThe number of right hand sides, i.e., the number of columns of the matrix B.
nrhs>=0.inoutAArray of dimension
(lda,n). On entry, the Hermitian matrix A. Ifuplo='U', the leadingn-by-nupper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. Ifuplo='L', the leadingn-by-nlower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit, ifinfo=0, the block diagonal matrix D and the multipliers used to obtain the factor U or L from the factorization A = U*D*U**H or A = L*D*L**H as computed byzhetrf.inldaThe leading dimension of the array A.
lda>=max(1,n).outipivArray of dimension
n. Pivot indices (0-based). Ifipiv[k]>=0: rows/columnskandipiv[k]were interchanged,D(k,k)is a 1-by-1 block. Ifipiv[k]<0(upper): rows/columnsk-1and-ipiv[k]-1were interchanged,D(k-1:k,k-1:k)is a 2-by-2 block, andipiv[k-1]=ipiv[k]. Ifipiv[k]<0(lower): rows/columnsk+1and-ipiv[k]-1were interchanged,D(k:k+1,k:k+1)is a 2-by-2 block, andipiv[k+1]=ipiv[k].inoutBArray of dimension
(ldb,nrhs). On entry, then-by-nrhsright hand side matrix B. On exit, ifinfo=0, then-by-nrhssolution matrix X.inldbThe leading dimension of the array B.
ldb>=max(1,n).outworkArray of dimension
max(1,lwork). On exit, ifinfo=0,work[0]returns the optimallwork.inlworkThe length of
work.lwork>=1, and for best performancelwork>=n*nb, wherenbis the optimal block size forzhetrf. Forlwork<n, TRS will be done with Level BLAS 2; forlwork>=n, TRS will be done with Level BLAS 3. Iflwork=-1, then a workspace query is assumed; the routine only calculates the optimal size of theworkarray, returns this value as the first entry of theworkarray, and no error message related tolworkis issued.outinfoinfo=0: successful exitinfo<0: ifinfo=-i, the i-th argument had an illegal valueinfo>0: ifinfo=i,D(i,i)is exactly zero. The factorization has been completed, but the block diagonal matrix D is exactly singular, so the solution could not be computed.
void zhesv(
const char* uplo,
const INT n,
const INT nrhs,
c128* restrict A,
const INT lda,
INT* restrict ipiv,
c128* restrict B,
const INT ldb,
c128* restrict work,
const INT lwork,
INT* info
);