有限元讨论班大纲
黑桃皇后的喵酱
2022年02月01日 15:55

有限元分析【1】是一种数值求解微分方程组的方法。它最初起源于土木工程和航空航天的弹性和结构分析问题,现在被应用于包括材料形变、传热学、流体力学在内的各种工程问题。

【1】有限元分析(Finite Element Analysis,FEA)有时又被称作有限元方法(Finite Element Method,FEM),二者基本可以混用,微小的区别在于,FEM 侧重于整套理论而 FEA 侧重于应用 FEM 于具体工程问题。

为了快速了解有限元,我们组织了一个有限元讨论班​。我们希望揭去有限元神秘的外衣,只需要几个十几分钟就能替代一学期的本科有限元介绍课程。我们选择了经典的 Jacob Fish 和 Ted Belytschko 的《A First Course in Finite Elements》作为教材。整个讨论班分为三个部分:一维问题的有限元、高维标量场的有限元、高维矢量场的有限元。我们会先讲一部分,然后做一个 “编程挑战”,用简单的 Python 代码确认我们理解的是对的。

有限元的具体操作如下。首先把问题的区域划分为很多子集,比如三角形(四面体)或者四边形(六面体),每个子集被称作 “元素”(element)。之后用一系列局域在这些子集上的函数展开微分方程的解,这个展开肯定是近似,不过我们有理由相信只要我们子集划分足够细密和合理,这个近似就足够好,这些局域在子集上的函数称为 “shape function”。于是一个微分方程就被简化为一个代数方程问题了,未知量是用 shape functions 展开的系数,而且当微分方程是线性的时,我们获得的代数方程也是线性的,或者说我们获得了一个线性方程组。只要解出这个线性方程组,我们就获得了原来微分方程的解的一个近似。

在这个过程中,我们需要先把原方程写为变分法的形式【2】,这在有限元方法中被称为 “弱形式”,而原来的方程就被称作 “强形式”。之后选择一些 shape functions 张成试探解并代入弱形式,你会开心地发现,你获得了一个线性方程组,只要调用一些成熟的解线性方程组的包就可以轻松获得结果。有限元讨论班 1​ 讨论了其中的具体操作,之后有限元讨论班 2​ 回顾了公式的推导,并且做了一个简单的 Python 实现。

【2】注意,只是变分法的形式,其内核仍然是朴素的,所以不了解变分法并不影响理解有限元。

有限元讨论班 1 和有限元讨论班 2 构成了第一部分,一维问题的有限元。有限元讨论班 3​ 和 有限元讨论班 4​ 将第一部分的知识推广到高维,有限元讨论班 5​有限元讨论班 7​有限元讨论班 8​ 是对应的编程挑战,它们一起构成了第二部分,维标量场的有限元。那有限元讨论班 6​ 呢?它和有限元讨论班 9​ 一起属于第三部分,高维矢量场的有限元。由于有限元中涉及的矩阵都是稀疏矩阵,我们还另外讨论了一下 Python 中的稀疏矩阵​。总结一下是

  • 第一部分,一维问题的有限元:1(理论)、2(编程)

  • 第二部分,维标量场的有限元:3(理论)、4(理论)、5(编程)、7(编程推导的理论)、8(编程)

  • 部分,高维矢量场的有限元:6(理论)、9(理论)、做了(编程)

  • 编外:Python 中的七种稀疏矩阵,应该用哪个?

我们这个讨论班是全息的,就是说这个课程的一部分就可以替代整体。比如

  • 2 会回顾 1 的内容

  • 4 会回顾 3

  • 5 会回顾 3 和 4

  • 7 很仔细地用 Python 推导了 3 和 4 中的公式(是的 Python 可以推公式)

  • 9 会回顾 6

所以时间紧张的同学可以,1、2 择一,3、4 择一,只看 5 跳过 7、8,6、9 择一,便可大致了解有限元。

所有的视频都很短,我们尽力压缩到十几分钟。代码可以在 Github 搜索 FEMdemo 获得。希望我们的讨论班能帮助大家更好地理解有限元。