hesv_aa#
Functions
-
void chesv_aa(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_AA 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.
Aasen’s algorithm is used to factor A as A = U**H * T * U, if uplo = ‘U’, or A = L * T * L**H, if uplo = ‘L’, where U (or L) is a product of permutation and unit upper (lower) triangular matrices, and T is Hermitian and tridiagonal. 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 tridiagonal matrix T and the multipliers used to obtain the factor U or L from the factorization A = U**H*T*U or A = L*T*L**H as computed bychetrf_aa.inldaThe leading dimension of the array A.
lda>=max(1,n).outipivArray of dimension
n. On exit, it contains the details of the interchanges, i.e., the row and columnkof A were interchanged with the row and columnipiv[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>=max(1,2*n,3*n-2), and for the best performance,lwork>=n*nb, wherenbis the optimal block size forchetrf_aa. 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_aa(
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_aa(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_AA 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.
Aasen’s algorithm is used to factor A as A = U**H * T * U, if uplo = ‘U’, or A = L * T * L**H, if uplo = ‘L’, where U (or L) is a product of permutation and unit upper (lower) triangular matrices, and T is Hermitian and tridiagonal. 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 tridiagonal matrix T and the multipliers used to obtain the factor U or L from the factorization A = U**H*T*U or A = L*T*L**H as computed byzhetrf_aa.inldaThe leading dimension of the array A.
lda>=max(1,n).outipivArray of dimension
n. On exit, it contains the details of the interchanges, i.e., the row and columnkof A were interchanged with the row and columnipiv[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>=max(1,2*n,3*n-2), and for the best performance,lwork>=n*nb, wherenbis the optimal block size forzhetrf_aa. 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_aa(
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
);