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

标签 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

但最重要的是,info 返回 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 因式分解矩阵。您跳过了一步。首先使用 DPOTRFA 进行因式分解,然后使用它通过 DPOTRS 求解一个或多个右侧。

关于在 GNU/Linux 上从 C 中的 LAPACK 调用 DPOTRS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9454328/

相关文章:

c - 将乱码写入文件?

c - 根据用户的输入结束循环

检查子进程是否在 Unix 上的 C 中终止而没有阻塞

C 程序,链接器错误

docker - 在 Raku 中通过 NativeCall 调用 GSL 函数会引发错误

java - 为什么 Java 只接受字符串格式的输入?

matlab - Fortran 和 Matlab 返回同一矩阵的不同特征值

fedora - lapacke 或 clapack 如果在 linux 中使用 c/c++ 编程

fortran - 将 gfortran 链接到 LAPACK 和 BLAS 时出错

lapack - BLAS 和 LAPACK 的 Bazel 构建规则