我想在 c 程序中使用 Lapack 库中的 F77_NAME(dgeqrf) 函数计算 qr 分解。
对于矩阵 3x3 :
12.000000 -51.000000 4.000000
6.000000 167.000000 -68.000000
-4.000000 24.000000 -41.000000
我得到输出 3x3(R 矩阵和一些用于构造 Q 的 vector 的组合)(线性形式):
-52.545219, -0.790144, 0.061972, 165.895209, -70.906839, -0.520684, 27.328842, -31.566433, -23.015097
然后我使用 Lapack 的 F77_NAME(dorgqr) 来提取 Q 矩阵,得到输出 3x3(线性形式):
-0.228375, 0.970593, -0.076125, -0.618929, -0.084383, 0.780901, 0.751513, 0.225454, 0.619999
这是取自维基百科的示例,看来我的 Q 与维基百科的 Q 不同: http://en.wikipedia.org/wiki/QR_decomposition#Example_2
fortran 和 c 数组表示法之间的差异可能是原因吗? 对初始矩阵进行转置是否可以解决问题?
最佳答案
我希望你不要指望别人做你的工作。既然你几乎回答了你的问题,我不认为发布它有什么意义。此外,在使用本网站之前花一些时间阅读本网站的常见问题解答部分可能是一件好事。您可能会在那里找到一些有用的信息。
关于问题的答案:
这很可能确实是 C 和 Fortran 之间数组表示的差异导致您出现问题的原因。看这个:
http://en.wikipedia.org/wiki/Row-major_order
有关混合 Fortran 和 C 代码的一般信息,这可能会有所帮助:
http://www.yolinux.com/TUTORIALS/LinuxTutorialMixingFortranAndC.html
关于c - Fortran 和 C 数组存储的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5695908/