我是计算机科学和数学的双学位。我喜欢这两个科目。我正在考虑从事研究生职业,也许是科学计算。科学计算和数值分析之间的真正区别是什么?他们是作为职业研究的吗?
科学计算与数值分析
维基百科给出了很好的定义
数值分析是对使用数值近似(与一般符号操作相反)来解决数学分析问题(与离散数学不同)的算法的研究。
数值分析人员通常对证明其算法的数学结果感兴趣,包括误差范围(近似中的误差有多大)、迭代方案的收敛性(近似值是否接近正确的极限)、收敛顺序和收敛速度(多快算法是否收敛)和计算复杂度(限制算法所需的操作数量)。无需使用计算机就可以在这些领域进行研究,一些重要的成果甚至早于 1950 年代数字计算机的发展。
维基百科也有“科学计算”的定义
计算科学(也称为科学计算或科学计算 (SC))是一个快速发展的多学科领域,它使用先进的计算能力来理解和解决复杂问题。计算科学融合了三个不同的元素:[1] 算法(数值和非数值)以及为解决科学(例如,生物、物理和社会)、工程和人文问题而开发的建模和模拟软件优化解决计算要求高的问题所需的高级系统硬件、软件、网络和数据管理组件 支持科学和工程问题解决以及发展中的计算机和信息科学的计算基础设施。
科学计算更多地是关于从计算机中获得准确解决方案的实际方面。这显然建立在数值分析的结果之上,但它也大量依赖于计算机体系结构和软件工程。尽管科学计算的研究通常是为了自身的利益和开发将在许多应用中使用的硬件和软件,但也有许多科学计算研究是由解决特定科学和工程问题的需要驱动的。例如,研究气候变化的全球气候模型的发展也推动了科学计算的发展。
数值分析最常见于数学和应用数学系,而科学计算是一个跨学科领域,可以在计算机科学系、数学系以及各种工程和科学学科中找到。
作为一个在研究生院期间从工程转向科学计算的人,偶然需要我在这里做的那种工作是我的两分钱:
- 数值分析将专注于事物的数学和算法方面。找出使用什么技术来解决没有解析解的特定数学问题,例如 ODE 的 PDE 的矩阵操作优化等。
- 如今,数值分析通常涉及大量编程,但它仍然将有效算法的数学思想转化为计算机代码。
- 传统上,FORTRAN 是中流砥柱。但是你也可以期望使用 C/C++ 和现在的 Python。有些东西可能还涉及 Mathematica 或 MATLAB 等软件包
- 来到科学计算,它更像是一个应用领域,人们试图使用计算资源来解决一些科学问题。这可能涉及大量的螺母和螺栓工作。例如编译代码、安装操作系统和库、设置选项以使科学代码工作等。
- 由于如今相当多的科学计算涉及并行计算,因此您很可能会接触到计算集群、超级计算机、云计算等
- 在科学计算中,虽然您可能会使用 C / FORTRAN 等编程语言,但期望使用“粘合” / 脚本语言(如 bash / perl 等)进行大量工作。
- 你可能会经常使用 Linux 系统并最终相当熟练地使用命令行和 sed / awk 等工具。有些人最终成为系统管理员。
- 许多科学计算涉及可视化和数据存储/数据检索。许多人最终成为大数据 / Hadoop / Map Reduce 等方面的专家。
- 数值分析本质上是一项专业工作。您擅长数学和编码,并非常有效地解决特定问题。有时会在此过程中发明一两个算法。从某种意义上说,科学计算是一项通才的工作。相对来说。您经常一起使用不同的工具来解决特定的应用问题。
- 许多科学计算可能涉及在接口处工作。例如两个程序之间的接口。您将数据从一个工具传输到另一个工具进行处理的地方。在此过程中进行了一些格式操作。即,您正试图让不同的工具相互交谈,而这些工具并不是真正设计用于相互交谈的。
- 科学计算人员通常必须掌握各种数据格式。许多仪器都有自己的专有格式,必须有人将数据解码为数值算法喜欢的格式。
- 一些科学计算人员最终配备了具有非常专业性质的“帮助台”(薪水也很高),其中一个基本上可以帮助普通研究人员/学生/教授使用机构的计算资源来解决可能出现的任何问题。ie 科学计算专家是熟悉各种代码和程序包的人,并且能够就使用什么工具来最好地解决计算问题向用户提供建议。
- 您最终可以将代码移植到其他硬件。或者并行化以串行模式编写的遗留代码。或者优化代码以更快地运行。有些人会将代码转换为在 GPU / CUDA 等中运行,以使它们运行得更快。
- 相当多的科学计算涉及故障排除。通常是其他人编写的代码。弄清楚为什么它们会在某些硬件等上崩溃。
- 通常你是专家之间的中间人。例如,我不得不与核心程序员、需要计算但自己不会编写太多代码的生物学家、系统管理员、网络专家、负责数据中心的技术人员等一起工作。
- 当购买新硬件或决定计算系统的架构时,可能会要求科学计算人员提供重要的投入。在这些任务中,您最终会与来自 Dell / Cray / IBM / Infiniband / Cisco 等公司的销售工程师和技术专家密切合作。
希望这能让您对这些领域有所了解!
最后一点建议(多加一点盐!):如果你擅长数学,比如精确和细节,阅读论文,并在个人智力很重要并需要长时间持续的重要努力后找出细节然后努力进行数值分析。
另一方面,如果你喜欢成为一个多面手,换个领域,用努力工作来弥补天才,做一个多面手,愿意接受模糊和模糊的经常相互冲突的建议,喜欢与团队合作并处理冲突,紧迫的最后期限,与 MBA 打交道等,然后成为科学计算专家。
再用一大撮盐吃这个。每个人的情况都是特殊的。我们中的大多数人来到我们所做的事情完全是巧合,而不是因为我们是这样计划的。:)
大卫宾德尔的这篇文章非常好。
摘录:
如果数值分析是关于数值方法设计和分析的数学方面,那么科学计算是关于涉及计算机的方面。当我担心缓存架构时,或者当我并行化数值方法时,或者当我构建小工具来自动生成部分科学代码时,我会从事科学计算。我认为,科学计算和数值分析之间的关系类似于理论计算机科学和系统设计之间的关系——它们是两个截然不同的领域,尽管它们之间的界限很模糊,既不能单独繁荣,也不能繁荣发展一起。
从我在科学计算开始以及所有电子计算语言和硬件的开始,即 60 年代初的经验来看,这些是我对数值分析与科学编程的想法。
我研究液体火箭燃烧不稳定性问题。燃烧不稳定性导致在火箭燃烧室周围运行的压力波扰乱壁传热(可能损坏发动机),并可能在进料系统中建立流量/压力不稳定性(也可能损坏发动机)。分析这些问题的最终模型将是 2 相 Navier-Stokes 方程的瞬态(高频)解。那时一个不可能的目标。现在是可以实现的。
与首席研究员一起的数值分析师将研究将方程离散化为有限差分算法,并选择要纳入模型的过程以及它们之间的权衡。分析人员将研究可能会选择哪些解决方案技术(数值配方)来对要建模的现象进行最佳近似,以识别硬件限制。
科学程序员会寻找在计算机上实现解决方案的最有效方法,即编码方法和硬件限制(内存管理等)。对于当时的原始硬件来说,这是一个主要问题。有时在大型机上运行需要几天时间才能完成。
一个主要问题是如何从不准确的求解方法引起的数值不稳定性中确定一个好的燃烧不稳定性分析方案。这需要数值分析师和科学程序员之间的密切合作。事实上,很多时候都是一个人同时担任这两个角色。