Matlab(对比C/FORTRAN)是21世纪专业数学研究者的可敬语言吗?

mr *_*lab 17 c matlab fortran mcmc

我是matlab的死硬用户,主要是因为这是我第一次学到的东西而且我没有遇到过切换差异很大的问题.我来自数值优化/线性代数,我已经在数百万个自由度中进行了优化和特征值计算.最近,我进入了随机性的境界,我最初的印象是我不得不改变.但是,在优化代码并小心地将种子初始化为随机数生成器之后,我能够在大致相同的时间内完成与同时代相同的蒙特卡罗任务.我的理解是基础级别'if'语句等在matlab中明显变慢.但是,如果在每个循环中有可以进行矢量化的重要计算,我' 我不相信C会更好.而且,无论如何,matlab似乎做得很好,因为我的上限不亚于任何其他专业(在很多情况下,似乎更多).我有一种感觉,我会从这里的亲C人那里得到很多回复,他们很久以前就已经把matlab写成了一些琐碎的玩具语言.我是一名专业研究人员,并认为matlab对于最高级别的计算密集型数学编程具有竞争力.我错了吗 ?我是否需要考虑更改为较低级别的语言,例如C/FORTRAN?为什么或者为什么不 ?有没有像我这样的人?非常感谢!干杯 我有一种感觉,我会从这里的亲C人那里得到很多回复,他们很久以前就已经把matlab写成了一些琐碎的玩具语言.我是一名专业研究人员,并认为matlab对于最高级别的计算密集型数学编程具有竞争力.我错了吗 ?我是否需要考虑更改为较低级别的语言,例如C/FORTRAN?为什么或者为什么不 ?有没有像我这样的人?非常感谢!干杯 我有一种感觉,我会从这里的亲C人那里得到很多回复,他们很久以前就已经把matlab写成了一些琐碎的玩具语言.我是一名专业研究人员,并认为matlab对于最高级别的计算密集型数学编程具有竞争力.我错了吗 ?我是否需要考虑更改为较低级别的语言,例如C/FORTRAN?为什么或者为什么不 ?有没有像我这样的人?非常感谢!干杯

Hig*_*ark 17

我和一个专业研究地球物理学家团队合作,虽然我自己更像是一名数值软件工程师.我认为如果你的工作是数学数学,那么Matlab是非常合适的,特别是因为你已经熟练使用它.

如果你选择C或Fortran,你可能会编写速度更快的程序,尽管可能没有你希望的那么快,因为Matlab使用了很多数值例程,就像你在编写时一样使用相同的BLAS(等)库. C或Fortran.但是从我的工作经验来看,我的同事发现编写程序的能力比编写更快的程序更重要.他们产生了许多想法,经过反思,他们后来拒绝了.Matlab在C和Fortran之上提供的增加的开发速度意味着它们更快地完成整个周期(通常包括结果的可视化)并且更频繁地进行,因此通过一些粗略的测量来做更多的科学.

(顺便说一句:我得到的一项工作是将一些未被拒绝的Matlab代码转换为Fortran程序,以便在公司的大型集群上执行.但是,当初始研究完成时,我们的一些代码会发生这种情况.我们想将它们部署用于生产.)

我还要指出Matlab通过并行计算工具箱具有良好的并行计算能力(如果你能负担得起),当你的问题变得更大并且你意识到你正在使用你的一些内核时,这可能会引起人们的兴趣.它甚至在最新版本中与GPU计算集成.

简而言之,我建议坚持使用Matlab可以让您专注于数学研究,而不是将注意力转移到使用新工具集进行摔跤.特别是因为您没有建议Matlab不能满足您的预期需求.

  • +1表示"快速编写程序比编写快速程序更重要". (7认同)
  • @Stuart Golodetz:实际上,即使是出于研究目的,只要用户直接与系统交互,它就必须快速.然而,一旦用户点击"跑",如果它需要一段时间就可以了,只要它可以工作(我昨天刚与一位同事讨论了他们一直在努力解决的问题目前似乎没有工作算法). (2认同)

Opt*_*nic 5

作为一个在工程领域介于学术界和工业界之间的人,我不更多使用 Matlab 的唯一原因是成本。如果您和所有您想提供代码以获得 Matlab 许可证的人都没有理由转换。

如果您发现代码的某些部分需要优化,您可以用低级语言重写这些位,并从您的 Matlab 程序中调用它们。在我看来,出于性能原因切换语言是一种过早优化的情况。我在迭代过程中解决计算密集型问题:

  1. 首先以最快、最直接的方式组合一个解决方案,在您的情况下,这意味着使用您最了解的语言。
  2. 使用分析器在有限的数据集上运行它并找出瓶颈所在。
  3. 使用以下任何一种方法修复最严重的瓶颈:a) 更改算法,b) 使用当前开发环境的功能进行优化,c) 重写该部分代码,以便针对特定问题执行更快。
  4. 回到 2. 直到你的运行时间/开发时间方程达到你觉得舒服的任何阈值(或者,如果你是研究生,直到你的主管大喊你停止摆弄该死的东西并且已经运行它)。

换句话说,在性能成为问题之前不要强调性能,特别是如果您正在编写供自己使用的代码。


nic*_*nez 5

如果您主要参与涉及简单数据结构的原型算法,那么matlab是一个不错的选择。在计算领域工作的许多学者的工作流程是:开发一种新算法,检查它在matlab中是否有效,然后编写论文,然后完成。如果这只是您想要做的,请坚持使用您知道的东西(matlab)。

如果您想做更多的事情,那么... Fortran和C / C ++不能直接与Matlab媲美,因为除非性能至关重要,否则没有理由使用编译语言。另一方面,Python除了是具有活跃在线社区的免费完整编程语言外,还具有与matlab相似的功能。切换到python的缺点令人惊讶地可以忽略不计,而且优点很大。我想念Matlab的一些数组处理语法,因为Numpy(用于数组处理的python模块)有一些怪癖,但仅此而已。我最近从Matlab切换到Python,但我不打算再回头。Matlab似乎使我以最糟糕的方式编写代码。我的python代码更加简洁,模块化和易于阅读。而且,Sphinx文档系统很棒。

简而言之,在以下情况下考虑使用python:

  • 您将需要维护一个大型代码库
  • 您想使您的项目开源,让其他人参与
  • 您想让没有Matlab许可证的人可以使用您的代码
  • 您想编写自己的自定义数据结构,而不是数组(树,图等)
  • 您需要实现非数字代码(搜索本地目录,从url下载,使用正则表达式查找本地文件,文本处理)
  • 您想轻松有效地生成出色的文档
  • 您不想在Matlab许可证上花费现金

这是争论通过Matlab进行科学研究的python链接:http : //www.stat.washington.edu/~hoytak/blog/whypython.html

这是一个自我放纵的链接,显示python Sphinx惊人的潜力,可以自动生成漂亮的在线文档,该文档无缝地集成了数学推导和实际源代码:http : //pythonhosted.org/fit_neuron/overview.html

Python似乎已成为科学计算的标准,因此绝对值得学习。


Stu*_*etz 3

好吧,我更像是一名 C++/Java 程序员,而不是 Matlab 程序员,虽然我使用过 Matlab,但我认为对于数学研究,Matlab 相当适合。研究需要大量的实验,而 C++ 是一种可怕的实验语言。Matlab 使快速测试变得非常容易,找出哪些有效,哪些无效,然后继续前进。一旦你知道你想要做什么,你总是可以用另一种语言编写你的解决方案,假设 Matlab 版本太慢(从我见过的有限数量来看,有时是,有时不是)。

底线:您可能不想在所有事情上都使用 Matlab(脑海中浮现出“如果您只有一把锤子,那么一切看起来都像钉子”这句话),但对于数学研究的特定任务来说,它无疑是一种很好的语言。