我目前正在使用C和一些FORTRAN来求解微分方程的数值系统。
我对这两种语言都有点受够了,但是我需要一些(相当)高效的代码...我正在考虑切换到OCaml。
这值得么?
我目前正在使用C和一些FORTRAN来求解微分方程的数值系统。
我对这两种语言都有点受够了,但是我需要一些(相当)高效的代码...我正在考虑切换到OCaml。
这值得么?
Answers:
简街资本的人们肯定会这样认为。他们在2009年的CMU上发表了有关使用OCaml 的演讲。
我能想到的唯一缺点是矩阵不是一等公民。
首先,我想提出一个与众不同的说法,即对于数值计算,从长远来看,高级语言比低级语言有用得多。让我宽松地引用弗劳恩霍夫研究所的一位研究人员从事天气预报中的数值模拟工作。
在过去的十年中,CPU的速度提高了1000倍,而算法的速度提高了1000 * 1000。这意味着,今天在CPU上运行的算法将比今天在CPU上运行的算法高1000倍。
显然,在CPU速度和算法(例如磁盘或RAM)中要考虑更多的参数,但是该语句使我们无法理解,如果您选择低级语言,则会关注错误的因素(而不是1000) 1000 * 1000)。
当然,给定任何特定的数值算法,人们都可以期望C或Fortran击败OCaml或Common Lisp(实际上不是那么大)。但是,如果您实际上对数值问题感兴趣并且愿意改进算法,则应该选择一种高级语言,该语言可以使您在高层次上表达自己的想法并轻松地改进算法。
附带说明一下,如果您考虑在OCaml中编写数字代码,那么您肯定应该知道OCaml如何将参数传递给函数,内联函数和unbox float。所有这些都在Xavier Leroy的笔记中进行了详细介绍。