HPD solve

Implementation

Solves \(AX=B\), \(A^T X = B\), or \(A^H X=B\) for \(X\) given Hermitian positive-definite (HPD) \(A\) and right-hand side matrix \(B\) (note that these options are all identical except for when \(A\). is complex). The solution is computed by first finding the Cholesky factorization of \(A\) and then performing two successive triangular solves against \(B\).

Note that only the uplo triangle of \(A\) is accessed by the below routines.

Python API

HPDSolve(A, B[, uplo=LOWER, orient=NORMAL])
Parameters
  • A – Dense or sparse HPD matrix to solve against

  • B – Right-hand sides (which will be overwritten with the solution).

  • uplo – (optional) which triangle the data is explicitly stored in

  • orient – (optional) whether to use \(A\), \(A^T\), or \(A^H\)

Type of \(A\)

Type of B

Matrix

Matrix

AbstractDistMatrix

AbstractDistMatrix

SparseMatrix

Matrix

DistSparseMatrix

DistMultiVec

C++ API

void HPDSolve(UpperOrLower uplo, Orientation orientation, const Matrix<F> &A, Matrix<F> &B)
void HPDSolve(UpperOrLower uplo, Orientation orientation, const AbstractDistMatrix<F> &A, AbstractDistMatrix<F> &B)
void HPDSolve(const SparseMatrix<F> &A, Matrix<F> &B, const BisectCtrl &ctrl = BisectCtrl())
void HPDSolve(const DistSparseMatrix<F> &A, DistMultiVec<F> &B, const BisectCtrl &ctrl = BisectCtrl())

Dense versions which factor in-place

void hpd_solve::Overwrite(UpperOrLower uplo, Orientation orientation, Matrix<F> &A, Matrix<F> &B)
void hpd_solve::Overwrite(UpperOrLower uplo, Orientation orientation, AbstractDistMatrix<F> &A, AbstractDistMatrix<F> &B)

C API

Single-precision

ElError ElHPDSolve_s(ElUpperOrLower uplo, ElOrientation orientation, ElConstMatrix_s A, ElMatrix_s B)
ElError ElHPDSolveDist_s(ElUpperOrLower uplo, ElOrientation orientation, ElConstDistMatrix_s A, ElDistMatrix_s B)
ElError ElHPDSolveSparse_s(ElConstSparseMatrix_s A, ElMatrix_s B)
ElError ElHPDSolveDistSparse_s(ElConstDistSparseMatrix_s A, ElDistMultiVec_s B)

Double-precision

ElError ElHPDSolve_d(ElUpperOrLower uplo, ElOrientation orientation, ElConstMatrix_d A, ElMatrix_d B)
ElError ElHPDSolveDist_d(ElUpperOrLower uplo, ElOrientation orientation, ElConstDistMatrix_d A, ElDistMatrix_d B)
ElError ElHPDSolveSparse_d(ElConstSparseMatrix_d A, ElMatrix_d B)
ElError ElHPDSolveDistSparse_d(ElConstDistSparseMatrix_d A, ElDistMultiVec_d B)

Single-precision complex

ElError ElHPDSolve_c(ElUpperOrLower uplo, ElOrientation orientation, ElConstMatrix_c A, ElMatrix_c B)
ElError ElHPDSolveDist_c(ElUpperOrLower uplo, ElOrientation orientation, ElConstDistMatrix_c A, ElDistMatrix_c B)
ElError ElHPDSolveSparse_c(ElConstSparseMatrix_c A, ElMatrix_c B)
ElError ElHPDSolveDistSparse_c(ElConstDistSparseMatrix_c A, ElDistMultiVec_c B)

Double-precision complex

ElError ElHPDSolve_z(ElUpperOrLower uplo, ElOrientation orientation, ElConstMatrix_z A, ElMatrix_z B)
ElError ElHPDSolveDist_z(ElUpperOrLower uplo, ElOrientation orientation, ElConstDistMatrix_z A, ElDistMatrix_z B)
ElError ElHPDSolveSparse_z(ElConstSparseMatrix_z A, ElMatrix_z B)
ElError ElHPDSolveDistSparse_z(ElConstDistSparseMatrix_z A, ElDistMultiVec_z B)