在GNU / Linux上从C中调用LAPACK中的DPOTRS
当我从C内部调用时,我想从LAPACK中寻求DPOTRS函数的帮助。是的,我知道我正在尝试使用的矩阵是正定的(实际上是特征值3,1!)
现在我的function无法正常工作。 它返回不正确的结果。
double A[] = {2.0, 1.0, 1.0, 2.0}; double b[] = {1.5, 0.0}; printf("%5.3f %5.3f\n", b[0], b[1]); info = dpotrs('U',2,1,A,2,b,2); printf("%d\n", info); printf("%5.3f %5.3f\n", b[0], b[1]);
这是代码。 使用以下代码手动导入dpotrs:
static long dpotrs(char UPLO, long N, long NRHS, double* A, long LDA, double* B, long LDB) { extern void dpotrs_(char* UPLOp, long* Np, long* NRHSp, double* A, long* LDAp, double* B, long* LDBp, long* infop); long info; dpotrs_(&UPLO, &N, &NRHS, A, &LDA, B, &LDB, &info); return info; }
它返回错误的结果! 正确的结果是1.000,-0.500
但是,我收到了0.469,-0.188
但最重要的是,信息返回0,好像它进展顺利!
女士们,先生们,这让我很难过。
提前致谢!
我想你需要阅读一些文档:
* * Purpose * ======= * * DPOTRS solves a system of linear equations A*X = B with a symmetric * positive definite matrix A using the Cholesky factorization * A = U**T*U or A = L*L**T computed by DPOTRF. *
DPOTRS
的输入矩阵必须是LAPACK上或下三角格式的已经Cholesky分解矩阵。 你跳了一步。 首先使用DPOTRF
对A
进行因式分解,然后使用它来解决DPOTRS
一个或多个右侧。