我最近一直在与很多FORTRAN 77合作,虽然我最初有所保留,但我现在看到了这种语言的一些优点。它是:
这些品质对于非程序员工程师和科学家来说自然很有吸引力,他们只是想让计算机快速给出答案。但根据其年龄和一些基本假设,它有很多局限性。我对非程序员如何轻易地理解Fortran更高版本的一些附加功能持怀疑态度。
是否有一种像FORTRAN一样简单的现代语言,对于数学应用来说速度一样快,而且受限制较少?或者是Fortran 90,95,2003的答案。 。 。 ?
答案 0 :(得分:17)
或者是Fortran 90,95,2003的答案 。 。 。 ?
是。大多数编译器支持的Fortran 95是您正在寻找的语言。但是Fortran 2003有一些主要的增强功能(除了你对OOP的支持不必要),这可能是有用的。 Compiler Support for the Fortran 2003 Standard
答案 1 :(得分:10)
嗯,我是一名非程序员工程师(无论那意味着什么;我收集它意味着没有太多与计算机科学研究的联系)和......
继续JasonFruit对S. Lott答案的评论:
是的,该标准已经添加了很多功能,从F90到2003.但是“问题”,如果可以这样称呼(我无法想到或关心一个更合适的词)是很多人使用Fortran不知道它,保存他们需要的基本功能。在某种程度上,这是一种祝福和诅咒。他们从来没有学过它,从来没有读过它的书 - 他们只是随着它们的进展而捡起它。这种方式肯定可以工作一段时间(如果你简单地构建你的程序,像许多人已经做了几个世纪,并且有一种心理训练,这种方法可以持续一生/你的整个职业生涯),但过了一段时间它开始显示其不利之处。例如,尝试对comp.lang.fortran上的最新功能进行一些讨论,以测试您的知识。
所以,拿一本好书(很多人推荐三个中的一个给初学者; a)Chapman J. Stephen's b)Maine,或者c)Metcalf,Reid和Cohen(被称为“MRC书”) - 之后a许多“更加模糊”的功能不仅变得更加清晰,而且“显而易见”(在某种程度上; 这真的是更好的方式 - 为什么我这样做...之前? )。
负责这个问题。现在,Fortran值得学习的另一个问题 - 一定会出现这个问题吗? (它总是这样,相信我:)。这已被覆盖了很多次,因此我将直接针对上述内容my own post,并my older post(您需要向下滚动一下),这与某些问题相比有些问题。这里提到的其他langugages。
最后一件事,在大多数情况下是所有这些问题的原因,是人们对Fortran的看法,强调意见!一般来说(我们可以把这个论坛作为我们分析的一个很好的样本)是它不太好。很少喜欢[在这个论坛上关注fortran的问题一个月,你会很快知道他们是谁。顺便说一句,根据你的名字出现的频率来判断,你很快就会成为俱乐部的成员:)],大多数人要么无动于衷,有些人就是出于无知(比较F66和今天的语言经常使用),一些出于自己的原因。现在,如果我们采用这些并将其与一般人口进行比较,通过简单的帐户,结果肯定会变坏。如果你只采访传统工程师,那么结果就会大不相同。
Thhhh-aaa-ttt就是它。
哦,还有一件事 - Fortran是/现在仍然主要针对的是工程师,而不是数学家。它更适合于求解大型系统,然后将pi计算为ka-zi-llion十进制数。我不知道这是你的问题中的拼写错误,还是故意的。对于纯粹的数学应用(在经典的数学家意义上)我会(我是那个领域的一部分)可能选择,我不知道,Mathematica?或Pascal(不知道为什么它总是Pascal;但它似乎非常受那些人的欢迎)。
答案 2 :(得分:10)
我很惊讶这里的共识是现代Fortran,我勉强同意。
无论它的缺点是什么,Fortran都是唯一明确为科学编程而设计的语言。科学编程比网络服务器更精细(每行)和更简单(结构),它只需要不同的工具。例如,垃圾收集几乎从不用于解决主数据结构固定的大型2d / 3d PDE。
任何甚至没有多d数组作为第一类对象的编程语言都可以立即解除,以便进行科学编程。这就是所有基于C语言的。任何编程语言本质上都是神奇可怕的慢 - Java,我在看着你 - 可以立即被解雇。任何编程语言都是专有的并且需要数千美元的许可费用--Matlab - 可以立即被解雇。
Python和相关语言适用于原型设计,绘图很容易,一旦有了工作,可以用编译语言编写数值内核以提高速度;但它又缺乏真正的数组(Numpy很好,但不是很好)而且它是s..l..o..w。
顺便说一下 - 请不要
答案 3 :(得分:6)
对于您问题的最直接答案,我认为kemiisto的答案是正确的,并且Idigas标识了警告。
也就是说,我发现更多的数字代码与FTP,网络以及更接近图形的东西接触。我已经看到MATLAB在另一个答案中提出了建议,但我一直在编写越来越多的Python(使用NumPy)并在需要速度时调用Fortran。我几乎肯定不会用这种方式编写整个系统(例如整个数值天气预报模型),但它确实让我在很多方面都能充分利用这两个世界。
答案 4 :(得分:5)
或者是Fortran 90,95,2003的答案。 。 。 ?是的。对于科学计算,Fortran> = 90消除了FORTRAN 77的限制。了解如何使用可分配数组来生成动态大小的数组。学习如何使用模块来组织过程和变量 - 并轻松提供实际和伪参数之间的自动一致性检查。从FORTRAN 77开始,您可以使用对您有用的任何功能逐步学习Fortran 90/95/2003。您不必学习OO功能,可以忽略该部分语言,直到有一天它可以为您提供实用程序。
我推荐Metcalf,Reid和Cohen的书。
答案 5 :(得分:4)
你可能正在看MATLAB。许多工程师本科生都知道这一点,所以我认为非程序员很容易理解。
如果你想获得硬核,请查看J。
答案 6 :(得分:2)
我认为 Fortran 95 应该是您的选择,它看起来更现代,并且非常显着地扩展了Fortran 77。大多数编译器都不完全支持Fortran 2003标准。 Fortran的巨大优势在于每个数学问题都有一个优化的子程序(例如根寻找,矩阵乘法,特征值问题等)。其他人提到遗留库和lapack只是一个非常强大的例子。 Fortran的一个主要缺点是没有人在现实世界中使用它。
最好的书是我的观点“科学家和工程师的Fortran 90/95”。
当然所有其他建议都是有效的,但是Fortran不是免费的。
Python 是免费的,并且通过额外的软件包(例如Numpy和Scipy)支持许多科学应用程序。然而,在数字性能方面,Python相当慢。对于不需要大量计算能力的小型项目来说,它可能是一个不错的选择。语法很容易理解。
C 当然也是一个免费选项,并且有很多(不断更新的)科学图书馆。然而,当谈到可读性时,它无法击败Fortran。 Fortran可以很好地设置向量和数组。
C ++ 是C的超集,因此它绝对也是一种可能的选择。但是,对于您正在查看的问题,它可能是一种复杂的语言。科学C ++库的数量相当有限。有一些,但他们无法击败Fortran版本(或只是那些包装)。对于非常大的项目来说,它可能是一个非常好的选择,但是在世界上最快的计算机上运行的一些非常大的程序是用Fortran编写的。 C ++绝对值得学习,因为它被用于广泛的实际应用程序。
当然还有其他语言或工具,但我认为这些是跨科学学科最常用的。
答案 7 :(得分:1)
如果您对使用Fortran感到非常兴奋,可以考虑使用Fortran for Microsoft.NET。这个项目背后的想法是它允许你使用Fortran 语言,同时通过公共语言运行时(CLR)利用一个受管理的代码环境。
答案 8 :(得分:0)
@ S.Lott:无法想象像科学家这样的Fortran用户,不得不切换并转储他们所有的Fortran工作.....:S OP正在寻找关于新内容的输入......
到OP: 您是否已阅读Wikipedia详细说明对Fortran所做的更改,对于2003版本,允许与C的互操作性,所以也许S.Lott确实有点,或许,一点一滴,轻轻地移植一些东西或写C中的包装器调用Fortran模块?我将引用那个维基百科页面......
与C编程语言的互操作性。
答案 9 :(得分:0)
我最近和很多Matlab一起工作,今天我可以看到它的好处。是的很慢,因为它是一种解释型语言,但它的矩阵算法很快。我完全喜欢这种行为。 for循环的缓慢和矩阵运算的性能鼓励你以更加数学的方式思考,而不是坚持循环编程。但我同意Matlab可以被解雇,因为它不是开放的。
目前我期待朱莉娅语言。它受到了Matlab的极大启发,除了它确实想要快速。它也有静态类型,这也是一个非常大的优势。但朱莉娅还很年轻,所以不要指望它已经满足了你的所有要求。
答案 10 :(得分:-1)
简单易学(无面向对象或功能编程并发症)
易于阅读
快速闯入数字
听起来像是C。
在C中购买数字食谱。它以清晰,可读的方式涵盖所有基础。
http://www.amazon.com/Numerical-Recipes-Art-Scientific-Computing/dp/0521431085
答案 11 :(得分:-2)
我假设你正在考虑为解决具体问题而编写的小型专用程序。在这种情况下,如果OO的复杂性真的困扰你,我只会编写一个C#或Java应用程序,而不是使用OO。 Visual Basic现在也应该非常快。
现在几乎所有编译语言在数学上都很快,所有操作都是在数学协处理器上完成的 - 所以除非你发现某些语言特别缺乏,否则我不会让任何语言“数学速度”困扰我得多。