我通过粘贴此链接中的命令在 Msys2 中安装了 LAPACK:https://packages.msys2.org/package/mingw-w64-x86_64-lapack。然后我用
-llapack -lblas
链接了图书馆。一切似乎都很好,但每次我使用 LAPACK 的子程序时,我都会得到不正确的结果。
例如子程序DGESV。我尝试了许多不同的输入值,但都得到了不正确的答案。有谁知道我为什么会得到这些结果?
我尝试了不同的值(不同的矩阵)并且我在网上搜索了答案,但没有成功。
相关代码:
call DGESV(N, 1, K, N, U_step, FRes, N, info)
if (info /= 0) then
write(*,*) "Error while Solving Matrix"
stop
end if
基本上是形式 Ax = B --> KU_step = FRes
错误结果示例: K = , FRes = 我不只是信任 Matlab,我还在 Wolfram Alpha 中交叉检查了结果。
您明显期待
DGESV
的第 5 个参数的结果,但 DEGSV 实际上在第 6 个参数中输出结果,因此覆盖了输入的右侧向量。
第 5 个参数是一个工作整数数组,其中
DEGSV
存储 LU 分解的枢轴索引。
所以你的代码应该是这样的:
integer :: ipiv(N)
...
U_step(:) = FRes(:)
call DGESV(N, 1, K, N, ipiv, U_step, N, info)
DGESV
文档:https://netlib.org/lapack/explore-html/d7/d3b/group__double_g_esolve_ga5ee879032a8365897c3ba91e3dc8d512.html