MATLAB 和 FORTRAN 有什么区别?

计算科学 matlab 流体动力学 正则 语言
2021-12-22 17:28:08

在我们大学,一些计算方法的博士生更喜欢 FORTRAN 而不是 MATLAB。我不明白为什么?当用于光谱方法、FEM 或 BEM 等计算方法时,它们之间有什么区别?请告诉我你用的是哪一个,为什么?你推荐我学什么语言?

我想研究流体动力学中的计算方法。

4个回答

当一个人使用一种低级编程语言(例如 C++ 或 FORTRAN)时,基本上可以控制很多事情:如何传递参数、如何在内存中对齐数据结构、循环大稀疏矩阵元素的最有效方法是什么(请参阅缓存抖动)当一个倍数时,依此类推。相比之下,当一个人使用高级软件时,很多事情都是“黑匣子”——通常不知道底层发生了什么。

事实上,这个问题还有很多,但这是基本的区别。我不是一个自信的 Matlab 用户,但我可以给你一个关于 Wolfram 语言的例子:尽管它是非常高级的,但它使用 LAPACK进行密集矩阵计算(这是一个用 FORTRAN 编写的为此目的的标准软件库)。它还依赖于再次用 FORTRAN / C 编写的Intel MKL。(因此高级软件严重依赖遗留代码。)它还具有Compile[]功能,可以显着加快速度。

所以这些可能是你们大学的一些学生更喜欢 FORTRAN 的原因:它具有低级功能,便于矩阵/向量操作,它相当古老并且拥有巨大的遗产(英特尔 MKL 就是一个很好的例子),它是可编译且快速。

如果您查看现代开源 FEM 软件库(deal.II、mfem、FEniCS),您会注意到它们是使用 C++ 开发的。FEniCS 也有一个高级 Python 接口,它通常比 C++ 的接口慢。
由于我上面提到的原因,我相信他们倾向于使用 C++。

至于我,我使用 C++ 进行大型计算。我还使用 Mathematica 进行符号计算(这非常有用)或者如果我想快速编写代码。所以我的建议是:至少学习一门高级语言和至少一门低级语言。

一般而言,使用高级语言(例如 MATLAB)编写软件的效率会更高,该语言具有描述特定领域(例如计算科学中的矩阵)问题的有用功能。通常更多的时间花在 编写软件而不是实际运行它上,因此通过使用正确的高级语言来减少编程时间,而不是通过使用低级语言来减少运行时间是正确的权衡。

因此,您的问题与其说是 MATLAB 与 FORTRAN,不如说是高级语言与低级语言。甚至我关于高级语言导致代码运行速度变慢的假设也不一定正确。Julia编程语言项目的目标之一就是挑战这一假设。

为了更好地理解这种低级与高级语言的比较,我强烈建议查看 Julia 开发人员编写的一些文档(例如Julia: A Fresh Approach to Numerical Computing

了解这些更广泛的问题将使您能够就特定问题(MATLAB 与 FORTRAN)做出明智的决定。

已经有很好的答案了,我只想补充两个方面:

供应商锁定:

如果您选择Matlab或类似的软件包(Mathematica 等),您将自己链接到该供应商。许多大学付费为他们的学生和研究人员提供这些课程。然而,有些人可能不会。如果您在专有软件包中开发您正在做的任何事情,那么只有那些有能力使用该软件的人才能从您的工作中受益只有当第三方拥有 matlab 时,才能执行由第三方验证或伪造您的工作的非常重要的步骤!

与此相反,编程语言更自由。如果您进行了良好的研究,并发现了一些开创性的见解,那么验证/伪造可以像给您的代码免费许可一样容易地完成,然后将其上传到某个地方。

透明度:

想象一下,有人在会议上接近你并声称你的结果是错误的。他们不可能是对的!一定有什么错误。当然,您可以向那个人展示您在 matlab 中所做的事情,然后您可以向他证明您所做的事情是合理的。结果坚持下来了!然后你们两个会盯着matlab这个巨大的软件黑匣子,不知道到底出了什么问题。

与此相反,如果您将自己限制在开源语言和编译器上,那么如果出现一些错误或错误,您至少有机会一直追随兔子洞。

免责声明:我确实认为像 Matlab 这样的程序在快速原型设计中占有一席之地。如果你想检查一个想法并且你只有一周的时间去做,那么 Matlab 可能是一个很好的工具!

这个问题可以被认为是基于意见的,但对于从该领域开始的人来说可能很有用。在回答中,我尽量不使用个人意见,而是提出一些选择标准

好的开始 Fortran 是一种历史悠久的程序语言,它是为计算而生的。Matlab 更像是一个环境,它是建立在 Fortran 之上的(你可以阅读 make in)。

Matlab 的实现是为了提供一个用户友好的环境,在该环境中可以快速简单地开发数字代码(特别是用于处理矩阵)。它具有许多已经可用的功能和方法,可以立即投入使用。显然,这些优势被一些妥协所抵消,比如执行速度(这里我有点'简化,但我觉得思路还是挺清楚的)。

由于这些原因,Matlab 主要针对开发原型,滥用计算机术语不用于生产用途。相反,Fortran 是一种编译语言,其中代码的开发速度较慢,但​​具有一些优势,例如性能。

因此,这个问题的答案是依赖。根据什么?你的目标。我试图解释。

你可以用 Matlab 做 CFD。在这种情况下,我希望您的工作更专注于新数值方法的开发,而不是应用程序本身。这主要是因为易于开发(读取实现)新想法/算法,并且因为您会使用“小”尺寸的问题,其中计算性能的外观不太重要。

但是,如果您的兴趣是模拟结果,也许使用真正的问题,那么您很可能是更好的 Fortran 或特定领域的语言/程序(商业或其他)。