C真的用于很多科学计算吗?

时间:2009-09-13 03:03:54

标签: c scientific-computing

我目前正在大学开设一门名为“科学计算”的数学课,教授告诉我们C是用于科学计算的最常用语言,我只是想知道这位教授的准确程度如何? / p>

10 个答案:

答案 0 :(得分:24)

在我的业务(粒子物理学)中,我们几乎从fortran 77直接转向c ++和python。我们这些关心关于编程的人都知道c,但它只针对小众应用程序(嵌入式DAQ板,专用驱动程序......)而写。

但是学习c将为你提供一个坚实的编程基础,与教授争论很少有利可图。

答案 1 :(得分:12)

我不认为你教授的答案即使是正确的也能为你服务。

根据我作为科学计算和数据系统顾问的经验,C当然使用了很多,但Fortran和C ++也是如此。 Python是迄今为止最常用的脚本语言。

我认为这会发生变化。现在最重要的是并行计算,这是我所提到的传统语言中的痛苦(MPI任何人?)。我的猜测是,很多并行化将(并且应该)转移到虚拟机:Java或.NET;也就是说,我认为并行化应该是JIT的工作。是否会使用Fortress或其中一种传统语言启用,我不知道。英特尔正在推动parallel tools用于C / C ++,但是我想知道从长远来看,像Terracotta这样的东西是否会更好(我没有听说科学界有人试过它 - 大财务有,但他们不是那么开放。)

如果问题是你应该学习什么来获得科学计算的工作,那么我要说的第一件事就是你更有可能被雇用来获得科学技能而不是你的编程技巧(这部分解释了很抱歉很多科学代码的状态,有关详细信息,请参阅this SO topic)。如果 将被聘用为您的编程技能(可能是HPC),那么请考虑一下这位教授认为,在不久的将来,这些项目可能已经过时了。但是,了解一些Python并不会有什么坏处,包括NumPy

答案 2 :(得分:7)

据我所知,Fortran在科学方面非常普遍,但C语言足够通用,对于大多数类型的编程而言,它是一个很好的解决方案。

答案 3 :(得分:5)

对于生物信息学和计算生物学,C非常受欢迎。

答案 4 :(得分:4)

许多“科学计算”在Mathematica,Matlab和其他类似工具中处理。

嗯......在我看来,Matlab是用C或C ++编写的,但Mathematica的许多部分都是用Mathematica编写的。可以肯定的是,由于历史原因,以及C的内在特征,许多科学和高科技计算软件库等都是用C / C ++编写的。

我怀疑C / C ++将继续为许多实时和高性能应用程序带来有利的优势,可能不是原始计算本身(不能用更高级别的语言表达),而是用于本地优化紧密循环,以及与各种组件的接口,无论是物理设备,还是软件元素,例如并行计算框架。

正如dmckee指出的那样,对c的研究为大规模编程提供了良好的基础,至少是程序编程。它也有实际应用,所以你的教授的意见在这个时候有一些强有力的支持。但是,做!继续挑战,从你的教授和长辈那里得到的智慧,理解有时候像善良的禅师,他们会让你走上一条道路,而不是为了目的地,而是为了旅行/过程。

答案 5 :(得分:1)

C广泛用于编程。我们大多数程序员都在用C语言进行编码,尤其是在我们上大学时。我想这只是你的教授偏好: - )

答案 6 :(得分:1)

  

C真的用于很多科学计算吗?

科学计算包含许多不同的东西,因此,许多不同的编程语言被用于科学计算。

传统上,科学计算意味着高性能计算,并且范围受限于大多数线性代数和一些频谱方法(例如FFT),并且主要在Fortran中完成。从那时起,科学计算的广度已经大大扩展,许多人现在正在考虑技术计算(例如,体量数据,图形绘制,原型设计)属于同一标题,而其他人则采用新形式的高性能计算,例如符号计算。 / p>

Python,R,Mathematica和MATLAB等语言通常用于技术计算。 C,C ++和Fortran等语言仍然用于数字运算。像OCaml这样的语言用于大规模的符号计算。

答案 7 :(得分:1)

作为一名为科学家和工程师构建软件的专业程序员,我可以说几乎所有的数值方法都是用C语言编写的。所以我们的情况确实如此。我们有一些C ++和Fortran。在性能方面,很难击败编码良好的C和良好的编译器。非常非常偶尔我们可能会参加集会。

但世界已发生了很大变化。 Python是一种很棒的语言 - 最好的语言IMHO,可以调用本机库。然后R又是一个源解释语言,但是有一个庞大的数值方法库,都是用C或C ++编译的。然后添加所有新的硬件加速方法,如openCL和许多绑定... C或Fortran不再是唯一的答案。但对于传统的CPU数字运算,C和ASM是同类产品中最好的。

答案 8 :(得分:0)

根据我在不同实验室和研究机构工作的经验,我会说学习计算机语言只能为您提供基础和编程入门。 C或Java是一种很有用的语言,因此你的教授在某种程度上是正确的。

能够将您的1种语言知识应用于另一种语言是计算/开发工作环境成功的关键。当您通过不同的公司/机构/实验室小组移动时,您会发现他们每个人都有自己的语言/软件偏好。能够快速学习新事物比尝试记住某种特定语言的语法更重要。

当然,如果您要为项目选择所选语言,请选择具有所需库的1。

答案 9 :(得分:0)

是的,ANSI C伴随着MPI。

有时人们想要使用" Objective C",这意味着他们将函数放入大类的方法中,并且它的每个示例都将在不同的核心上运行。请注意,这不是C ++,而是" C with objects"。除了方法对象模型之外,没有使用C ++特性。这只是将旧的C包装成"理性对象模型",允许使用中间层等等。

以上的好例子:LAMMPS。

Charm ++是另一种以现代方式获得好老C的好方法"。

在其他科学语言的山上有LISP,Haskell和其他元朗组。这是其他的,"软"科学编程的世界,时间不是问题,而是存在答案。