c - Fortran 和 C 数组存储的区别?

标签 c r matrix fortran lapack

我想在 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/

相关文章:

r - 获取每一行的最后一个非空列的值

r - ifelse dplyr 显示错误的输出

r - 计算 R 中矩阵中有序对的数量

python - 如何检查矩阵是否在矩阵列表中 Python

C 中的字符打印

C 错误取消引用指向不完整类型的指针

c - char 数据类型中的撇号

c - 为什么内存损坏会存在……只有当我们不打印被损坏的变量时?

r - ggplot2时间序列的阴影包络

c# - C# 中的链接二维矩阵