在GNU / Linux上从C中调用LAPACK中的DPOTRS

时间:2012-02-26 15:29:17

标签: c lapack

当我从C内部调用时,我想从LAPACK中寻求DPOTRS函数的帮助。是的,我知道我尝试使用的矩阵是正定的(实际上是特征值3,1! )

现在我的功能无法正常工作。它返回的结果不正确。

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,就像它进展顺利一样!

女士们,先生们,这让我很难过。

提前致谢!

1 个答案:

答案 0 :(得分:1)

我认为您需要阅读一些文档:

*
*  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分解矩阵。你跳过了一步。使用A 优先对您的DPOTRF进行分解,然后使用DPOTRS来解决一个或多个右侧的问题。