专注于学习数学或计算是否更可取?

计算科学 并行计算 教育
2021-12-11 03:10:29

在我研究 Krylov 子空间方法的同时,我可以选择先探索 HPC 背后的数学或计算理论(硬件、操作系统、编译器等)。目前,我对这两个方面的了解都足够例如,我知道如何推导 CG 的方程和迭代方法的基础知识,但我对细节和更复杂的东西(如 Preconditioners 和 Convergence)一无所知。同样,我知道有限元方法的基础知识(弱形式,非弱形式,诸如 Codomain 和 Galerkin 之类的东西),但不知道它的深度。在计算方面,我知道如何用所有可能的语言进行串行编码,并且可以很好地使用 OpenMP 和 MPI。我不太了解硬件和缓存。

我的问题是:一个人应该专注于什么:数学还是计算?它们在 HPC 中是不可分割的吗?是否建议一个人学习一个而不是另一个?

编辑:我目前主修机械工程(我很遗憾),并且有大量的工程和计算课程(流体、传热等)。今年我将加入 HPC 研究生院,我想在开始研究生学习之前加强某些方面(数学/计算/混合)。我同样喜欢数学和计算(所以“做你喜欢做的事”是多余的)。

4个回答

HPC 是数学、计算、计算机科学和应用程序的混合体。从长远来看,您需要能够理解所有这些才能真正取得成功。但是,您不一定需要在所有这些方面都达到相同的熟练程度。

在计算与数学的争论中,对于工程师来说,我认为数值实现问题首先更重要。如果你等到你学会了数学理论然后开始实施,你可能会花很长时间做一些虽然毫无疑问有用但可能不会直接影响你的论文研究的事情。

所以,我首先倾向于理解计算方面,然后回过头来填补数学理论中的漏洞。硬件问题也可以学习——但很多影响软件的方式也取决于平台,所以同样,它可能不是您议程上的第一个项目。

其他人当然可能不同意我的观点;正如你所说,这更像是一个观点,而不是一个事实问题。

我喜欢aeismail的回答,但我将提供另一种观点。

在优化中,如果不了解真正的分析,就不可能真正了解该领域。甚至在处理数值问题之前,您就需要了解序列收敛的概念,因为您将在类中证明算法收敛。您将不得不在表面上理解诸如连续性和可区分性之类的概念。因此,实分析是非线性规划课程的先决条件。

我的论文涉及求解常微分方程的方法。收敛问题,特别是诸如“如果我降低我的局部误差容限,那么我计算的数值解接近我正在求解的方程的真实解”之类的问题,又是需要实际分析的问题。为了发展收敛问题的理论,我(违背了我的顾问的意愿)进行了两个学期的实际分析。(它得到了几份手稿的回报。)

但是,我知道有些人在数值方法和 HPC 中生存得很好,而无需参加纯数学课程。这实际上取决于您想要占据的利基市场。

如果你想开发新方法,那么理论课很有帮助。理论课也有助于提高一般数学素养;阅读数学论文变得非常容易。

如果您想将特定的数值方法应用于问题,数值方法类会更有帮助。我相信这种观点是aeismail的来源,对于工程师来说这是一种更常见的情况。(免责声明:我们彼此认识,并且毕业于同一部门。)

至于HPC,我得到的印象是经验是最好的老师。我参加了并行编程课程,它有点用处,但课程的主要信息是尝试一些东西,看看它们是否有效。如果它对您的论文研究很重要,您将获得 HPC 方面的经验。如果不是,你就不会,在你想换档并解决 HPC 问题之前,这可能并不重要。我的论文并不是特别重HPC,至少就我的编程而言,所以我不需要掌握那套技能。

最后,您可能应该专注于获取与您的论文问题相关的问题的背景,记住您认为您将来想做什么,并决定您需要与该领域的其他研究人员交流的广泛、一般的背景。你想加入的社区。你的博士学位将是你上课的最后机会之一,如果你认为你确实想学习数学理论(或任何科目,真的),如果没有建立某种基本的知识,你自己学习会相当困难熟练度第一。

尽可能多地参加这两门课程。我做到了,我不后悔。

假设您对研究事业感兴趣,您可以通过两者的任何组合获得成功。寻找知识与您相得益彰的合作者。我知道大量的数学知识,因为它与数值方法的准确性和稳定性有关,但对 HPC 的了解则少得多。我的合作者非常了解 HPC,因此通过合作,我们可以获得在大型机器上运行的创新数值方法。我做数学,他们做计算,大部分时间。

也就是说,我认为数学

  • 是更根本的
  • 学习更具挑战性
  • 在较长时间内保持相关性

HPC主题

  • 变化更快
  • 可以更容易地自己拿起
  • 不太普遍有用,更多的问题/应用程序/机器特定

这是一种过度概括,肯定会引起不同意的评论。但我认为这是有道理的。

我同意 aeismail 和 Oxberry。我决定写一个答案,因为你似乎面临着我去年试图找到答案的同样问题。我还主修机械工程(并且讨厌它,特别是固体力学),我花了很多时间研究 CFD 或优化中的数值方法。现在我正在攻读应用数学和计算科学的硕士学位。从我的角度来看,您首先需要决定将来要做什么。如果您想从事数值方法的建模或开发,那么您绝对应该学习数学。我花了两年时间研究有限体积和有限元方法,却不了解深层基础,现在我正在学习应用数学课程,这对我来说更有意义。我意识到这些方法是如何工作的,我不再盲目地尝试一切。它节省了大量的时间和精力。但是,如果您决定要进入开发软件和相关主题,那么您可能希望专注于 HPC 部分。以我的经验,有很多软件包已经过优化,可用于大量数值应用。因此,花大量时间开发自己的软件对我来说不是最好的主意,所以我决定在数学部分做更多的工作。