Fortran 中 LAPACK 的错误结果

问题描述 投票:0回答:1

我通过粘贴此链接中的命令在 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
  • K 是二次矩阵 (N x N)
  • U_step 是结果向量
  • FRes 是右侧 Vector

基本上是形式 Ax = B --> KU_step = FRes

错误结果示例: K = Picture of Matrix, FRes = Picture of FRes Result From LAPACK and Result From Matlab 我不只是信任 Matlab,我还在 Wolfram Alpha 中交叉检查了结果。

fortran gfortran lapack msys2
1个回答
0
投票

您明显期待

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

© www.soinside.com 2019 - 2024. All rights reserved.