12

最近我一直在使用很多 FORTRAN 77,虽然我一开始有所保留,但现在我看到了这种语言的一些很棒的品质。这是:

  • 简单易学(没有面向对象或函数式编程的复杂性)
  • 易于阅读
  • 快速计算数字

这些品质自然会吸引那些只想让计算机快速给出答案的非程序员工程师和科学家。但是基于它的年龄和一些基本假设,它有很多限制。我怀疑非程序员是否能轻松地理解 Fortran 更高版本的一些附加功能。

有没有一种现代语言像 FORTRAN 一样简单,数学应用也一样快,而且限制更少?或者是 Fortran 90, 95, 2003 的答案。. . ?

4

12 回答 12

17

或者是 Fortran 90, 95, 2003 的答案。. . ?

是的。大多数编译器支持的 Fortran 95 是您正在寻找的语言。然而,Fortran 2003 有一些可能有用的主要增强功能(除了从您的角度来看对 OOP 的支持是不必要的)。Fortran 2003 标准的编译器支持

于 2010-08-23T17:09:10.953 回答
10

好吧,我是一名非程序员工程师(不管这意味着什么;我认为这意味着与计算机科学研究没有太多联系)并且......

部分延续 JasonFruit 对 S. Lott 回答的评论:

是的,从 F90 到 2003 的标准增加了不少特性。但是“问题”,如果可以这样称呼它(我想不出一个更合适的词)是许多使用 Fortran 的人不知道它,保存他们需要的基本功能。在某种程度上,这是一种祝福和诅咒。他们从来没有学过,从来没有读过这方面的书——他们只是边走边学。这种方法当然可以工作一段时间(如果你简单地构建你的程序,就像许多人已经做了几个世纪一样,并且有一种心理训练,这种方法可以持续一生/你的整个职业生涯),但过一段时间它就会开始来显示它的缺点。例如,尝试在 comp.lang.fortran 上关注一些关于最近功能的讨论来测试您的知识。

所以,拿一本好书(许多人推荐给初学者的三本书中的一本;a)查普曼 J.斯蒂芬的 b)缅因州,或 c)梅特卡夫、里德和科恩(被称为“MRC 书”)——之后很多“更模糊”的特征不仅变得更清晰,而且“明显”(从某种意义上说;这确实是更好的方法——为什么我以前那样做……?)。

这就解决了这个问题。现在,另一个问题——肯定会出现——Fortran 现在值得学习吗?(它总是这样,相信我:)。这已经被讨论过很多次了,所以我将直接转到我自己关于上述内容的帖子,以及我较早的帖子(您必须向下滚动一点),其中涉及与此处提到的其他一些语言相比的一些问题.

最后一件事,在某种程度上,在大多数情况下,所有这些问题的原因是人们对 Fortran 的看法,重点是意见!一般来说(我们可以把这个论坛作为我们分析的一个很好的样本)是它不太好。很少有人喜欢 [在这个论坛上关注标记为 fortran 的问题一个月,您将很快了解他们是谁。顺便说一句,从你的名字出现的频率来看,你很快就会成为俱乐部的一员 :) ],大多数人要么漠不关心,有些人讨厌它,纯粹是出于无知(经常使用 F66 与当今的语言进行比较),有些出于自己的原因。现在,如果我们把这些拿来和普通人群比较,简单的算一下,结果肯定会很糟糕。

Thhhh-aaa-ttt 是它。

哦,还有一件事 - Fortran 是/曾经是并且仍然主要针对工程师,而不是数学家。它更适合解决大型系统,然后将 pi 计算到 ka-zi-llionth 十进制。我不知道这是你的问题中的错字,还是故意的。对于纯粹的数学应用(在数学家的经典意义上),我(如果我是该领域的一部分)可能会选择,我不知道,Mathematica?或者帕斯卡(不知道为什么它总是帕斯卡;但它似乎在那些家伙中非常受欢迎)。

于 2010-08-23T20:49:21.690 回答
10

我很惊讶这里的共识是针对现代 Fortran 的,我勉强同意。

不管它有什么缺点,Fortran 是唯一一种专门为科学编程而设计的语言。科学编程比网络服务器更微妙(每行)和更简单(结构),它只需要不同的工具。例如,垃圾收集对于解决主要数据结构固定的大型 2d/3d PDE 几乎没有用处。

任何甚至没有将多维数组作为一等对象的编程语言都可以立即被科学编程所抛弃。这就是所有基于 C 的语言。任何天生就慢得可怕的编程语言——Java,我在看你——可以立即被解雇。任何专有且需要数千美元许可费的编程语言——Matlab——都可以立即被淘汰。

Python 和相关语言非常适合原型设计,并且绘图很容易,一旦你开始工作,就可以用编译语言编写数值内核以提高速度;但它再次受到缺乏真正数组的影响(Numpy 很好,但不是很好)而且它是 s..l..o..w。

顺便说一句——永远不要看数字食谱书。他们很垃圾,他们推销的算法是过时的,而且代码从差到错。参加真正的数值算法课程——网上有很好的课程——或者买一本真正的数值算法书——看在上帝的份上,不要从书中输入代码来做线性代数或其他任何事情;使用数以万计的真实、专业品质的图书馆。

于 2010-10-01T13:36:35.537 回答
6

对于您的问题的最直接答案,我认为kemiisto的答案是正确的,其中包含Idigas确定的警告。

也就是说,我发现我的数字代码更多地与 FTP、Web 和更接近图形的事物接触。我在另一个答案中看到了 MATLAB 的建议,但我一直在编写越来越多的 Python(使用 NumPy)并在需要速度时调用 Fortran。我几乎肯定不会以这种方式编写一个完整的系统(例如一个完整的数值天气预报模型),但它确实让我在许多方面都拥有两全其美的优势。

于 2010-08-23T23:38:00.323 回答
5

或者是 Fortran 90, 95, 2003 的答案。. . ? 是的。对于科学计算,Fortran >=90 消除了 FORTRAN 77 的限制。了解如何使用可分配数组来获得动态大小的数组。了解如何使用模块来组织您的过程和变量 - 并轻松提供实际参数和虚拟参数之间的自动一致性检查。从 FORTRAN 77 开始,您可以逐步学习 Fortran 90/95/2003,使用对您有用的任何功能。您不必学习 OO 特性并且可以忽略这部分语言,直到有一天它为您提供实用程序。

我推荐 Metcalf、Reid 和 Cohen 的书。

于 2010-08-24T07:28:17.753 回答
4

您可能正在查看 MATLAB。许多工程师本科生都知道这一点,所以我认为非程序员很容易理解。

如果您想获得硬核,请查看J

于 2010-08-23T16:46:50.840 回答
2

我认为Fortran 95应该是您的选择,它看起来更现代,并且非常显着地扩展了 Fortran 77。大多数编译器不完全支持 Fortran 2003 标准。Fortran 的巨大优势在于每个数学问题(例如求根、矩阵乘法、特征值问题等)都有一个优化的子程序。其他人提到了遗留库,而 lapack 只是一个非常强大的例子。Fortran 的一个主要缺点是没有人在现实世界中使用它。

最好的书是我的意见“Fortran 90/95 for Scientists and Engineers”。

当然,所有其他建议都是有效的,但 matlab 不是免费的,而 Fortran 是免费的。

Python是免费的,并且通过额外的包(例如 Numpy 和 Scipy)支持许多科学应用程序。然而,在数值性能方面,Python 相当慢。对于不需要大量计算能力的小型项目,这可能是一个不错的选择。语法很容易理解。

C当然也是一个免费选项,并且有很多(不断更新的)科学库可用。然而,就可读性而言,它无法击败 Fortran。Fortran 可以很好地处理向量和数组。

C++是 C 的超集,所以它绝对也是一个可能的选择。但是,对于您正在查看的问题,它可能是一种复杂的语言。科学 C++ 库的数量相当有限。周围有一些,但它们无法击败 Fortran 版本(或者只是这些版本的包装)。对于非常大的项目来说,这可能是一个非常好的选择,但是在世界上最快的计算机上运行的一些非常大的程序是用 Fortran 编写的。C++ 绝对值得学习,因为它被广泛用于现实世界的应用程序。

当然还有其他语言或工具,但我认为这些是跨科学学科最常用的。

于 2010-08-24T17:47:15.477 回答
1

如果您对使用 Fortran 感到非常兴奋,您可以考虑使用Fortran for Microsoft.NET。该项目背后的想法是,它允许您使用 Fortran语言,同时通过公共语言运行时 (CLR) 来利用托管代码环境。

于 2010-08-23T16:47:04.007 回答
0

@S.Lott:无法想象像科学家这样的 Fortran 用户不得不切换并转储他们所有的 Fortran 工作……:S OP 正在寻找有关新功能的输入……

致 OP:您是否阅读过Wikipedia上的详细信息,其中详细介绍了 Fortran 2003 版所做的更改,允许与 C 互操作,所以也许 S.Lott 确实有一点,也许一点一点地,轻轻地移植一些东西或写入C 中的包装器来调用 Fortran 模块?我将引用该维基百科页面...

与 C 编程语言的互操作性。

于 2010-08-23T16:50:54.943 回答
0

我最近使用了很多 Matlab,今天我可以看到它的好处。是的很慢,因为它是一种解释语言,但它的矩阵算法很快。我喜欢它正是因为这种行为。for 循环的缓慢性和矩阵运算的性能鼓励您以更数学的方式思考,而不是坚持面向循环的编程。但我可以同意 Matlab 可以被解雇,因为它不开放。

目前我很期待 Julia 语言。它深受 Matlab 的启发,只是它确实想要快。它还具有静态类型,这也是一个很大的优势。但是 Julia 还很年轻,所以不要指望它已经满足了你的所有要求。

于 2014-02-15T12:14:31.223 回答
-1

简单易学(没有面向对象或函数式编程的复杂性)

易于阅读

快速计算数字

听起来像C。

购买 C 语言中的数字食谱。这几乎以清晰易读的风格涵盖了所有基础。

http://www.amazon.com/Numerical-Recipes-Art-Scientific-Computing/dp/0521431085

于 2010-08-23T17:06:38.517 回答
-2

我假设您正在考虑为解决特定问题而编写的小型专用程序。在这种情况下,如果 OO 的复杂性真的让您感到困扰,我只会编写一个 C# 或 Java 应用程序而不使用 OO。如今,Visual Basic 也应该非常快。

如今,几乎所有编译语言在数学上都很快,所有操作都在数学协处理器上完成——所以除非你发现某种语言特别缺乏,否则我不会让任何语言的“数学速度”困扰我太多。

于 2010-08-23T17:01:39.660 回答