【问题标题】:Pass Fortran output to Matlab将 Fortran 输出传递给 Matlab
【发布时间】:2017-02-06 12:45:12
【问题描述】:

首先,我是刚接触 Fortran 和 Matlab 这个领域的新手,所以如果我没有看到很明显的地方,请多多包涵。

这是我的问题: 我有一个 Fortran 90 代码,它将计算 2 个大型复杂矩阵 AB。我将这些矩阵写入一个文件,在MATLAB 中读取它并进行一些操作(求解特定的特征值)。这种方法的问题是即使是二进制格式的数据写入和读取也需要很长时间。在某些情况下,写入和读取操作比实际解决特征值问题要长。

那么,我是否可以直接将我的 Fortran 90 代码生成的矩阵传递给 MATLAB,而无需编写和读取?

我在 Fortran 中阅读了有关 call system 的信息,但它似乎没有传递任何参数。

【问题讨论】:

  • 为什么不用 Matlab 在 Fortran 中计算特征值?
  • 您可以在 Fortran 中使用 LAPACK 来计算特征值。
  • Matlab 的文档非常详细地解释了如何创建一个 Fortran mex 文件来直接调用;由于这会将代码的两个部分都放入 Matlab 内存空间,因此您无需进行耗时的文件读写。如果这没有吸引力,请不要放弃使用 Matlab 计算特征值的想法——Matlab 的大多数核心计算例程都是在编译代码中实现的,通常使用您调用的相同库(例如 BLAS、MKL)当 Matlab 不快时,Fortran 和速度差异可以忽略不计。
  • 你在用 gfortran 编译吗?查找 execute_command_line,它是 Fortran 2008 标准的一部分,应在新代码中考虑以实现未来的可移植性。 gcc.gnu.org/onlinedocs/gfortran/…

标签: matlab matrix fortran


【解决方案1】:

如果您遇到性能问题,您可能希望在 Fortran 中计算特征值(例如使用 LAPACK,如 cmets 中已经说明的 Vladimir F)。但是,与其启动 Fortran 程序并尝试将矩阵传递给 Matlab,不如从 Matlab 调用 Fortran 程序/Fortran 函数/子例程/矩阵/指针。您将不得不重写程序的某些部分,但您可以使用Fortran Matrix Library API。 (基本上使用mex作为cmets中提到的High Performance Mark)

【讨论】:

    猜你喜欢
    • 2017-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多