有限元如何把无穷维的连续场问题,转换为有限维矩阵方程,同时保留物理平衡,并判断计算结果是否可信?
全文只回答这一个问题。它可以拆成三问:
有限元最后交给计算机的是一组矩阵方程,但它的起点并不是矩阵,而是连续介质中每一点的物理守恒。两者之间的路线是:
全文分四个部分、九章:
符号约定 (全文统一):
| | |||
| | |||
| | |||
| |
微分方程要求每一点都严格平衡,这个要求对分段多项式太苛刻。本部分就从这一点出发,说明为什么必须改用弱形式:第 1 章交代要解的是什么问题,第 2 章把方程换成积分意义下的等价陈述并说明这样做换来了什么,第 3 章交代换过之后什么样的函数才有资格参与。到本部分结束,方程已经改头换面,但还没有引入任何近似。
连续问题的未知量是一个场 ——数学上就是一个定义在整个区域上的函数。结构力学的位移场 、传热的温度场 、流体的速度与压力 、电磁的电势、声学的声压——这些量在区域内有无穷多个取值,而计算机只能存有限个数。这就是全部困难的来源。
有限元的应对。 把物体切成许多小块(单元),规定未知量在每块内部只能是低次多项式——最常用的就是线性,于是整个解由有限个自由度 ——那些多项式前面的系数——完全确定。最常用的一类单元里,这些系数恰好等于节点上的场变量值(原因见第 4 章),因此习惯上直接叫"节点自由度"。至于方程如何跟着改写,是第 2 章的事。
本文使用的模型问题。 全文围绕同一个数学原型展开—— 稳态扩散(势场)问题 ,也就是泊松型方程(一般 可随位置变化,比经典 Poisson 方程更广)。
最好理解的例子是稳态传热 :温度分布不再随时间变化时,流进任意一小块材料的热量,必须等于流出的热量加上它自身产生的热量。 渗流 (未知量是水头)、 静电场 (电势)、 稳态物质扩散 (浓度)写出来是同一个式子——凡是"通量正比于某个量的梯度、且稳态下守恒"的现象,都长这样。
式中各符号:
| 广义通量 | |
| | |
| |
关于通量的符号 :传热、扩散、静电等问题中, 物理上向外的通量是 (热从高温流向低温,故带负号)。本文推导一律采用 这个组合,并把 称为广义通量 ——它与物理通量差一个负号,但全程自洽。若要代入实测的物理通量,按第 2 章末尾的约定改号即可。一维杆问题没有这个困扰: 就是轴力本身。
三个式子分管三处:
其中 、 。一维时它退化为
这一个式子同时是两个物理问题,第 6 章的算例会用到它的双重身份:
这个提法称为强形式(strong form) ——"强"指它要求方程在每一个点上严格成立,也因此要求 具有足够高阶的导数。这个要求正是第 2 章要处理的麻烦。
两类边界条件提供的信息不同。
| | |||
| |
这两类在弱形式中的地位也完全不同: 上的条件必须显式施加, 上的条件会在分部积分后自动进入。这一点第 2、3 章会说清。
强形式对解的要求太高。 式中含二阶导数,意味着 必须处处二阶可导。但现实中材料会分界、截面会突变、载荷会集中,解本来就不那么光滑;更要紧的是,我们打算用的分段线性函数根本达不到这个要求。
残差:还有多少没平衡。 把一个候选解代回强形式, 本应处处得零 ——那是真解才有的性质。候选解够不着真解时,代回去总要剩下一点:
物理上,残差就是"净流出减去源",即某点上还剩多少没抵消掉的量;在结构力学里它就是不平衡力 。
为什么不能逐点检查残差。 取一个分段线性的候选解:它在单元内部是直线(二阶导为零),在节点处一阶导跳变。于是强形式残差不能作为普通函数在单元界面上逐点定义 ——界面两侧通量不等,那里集中着一份没抵消的力,而它挤在零厚度的面上,不是"单位体积的量",强形式的提问方式装不下它。也就是说,"逐点检查残差是否为零"这个问题对这类函数提不出来 。
提高单元阶次并不能解决这一点。二次单元的二阶导在单元内部存在了,但相邻单元之间仍只有 连续,界面上一阶导照样跳变。 症结在界面连续性,不在多项式次数 (详见附录 2)。
那就换个问法。 逐点行不通,是因为"某一点上平不平衡"这个问题本身依赖二阶导。既然如此,就不要盯着单点,改成把残差摊到整个区域上去称量 ——要求它对测试空间中的每一个允许测试函数,称量结果都为零。注意是"每一个",不是某一次称出零就算过关。
这一步用两个动作完成:先把残差乘上一个函数再积分( 换问法 ),再对得到的式子做分部积分( 降低对 的要求 )。前者解决"怎么问",后者解决"谁有资格回答"。
动作一:乘 并积分,把"力"变成"功"。
这里的 叫测试函数 (test function),是我们自己挑的一个已知函数 ,不是待求量。它充当探针:拿它去和残差作内积,就是从某一个角度问一次"平不平衡"。 可以任意取(唯一的限制在 Dirichlet 边界上,见第 3 章),取得越多,检验得越彻底。
在力学里 有个现成的名字: 虚位移 ——一个假想的、微小的、不违反约束的位移。这样一来,残差是单位体积上的不平衡力,于是
于是"每一点合力为零"就换成了" 对任意虚位移,总虚功为零 "。两者等价——若某处合力不为零,总能挑一个集中在那里的 把功做出来。这一步之所以有意义,是因为功可以累加、可以积分,而"逐点为零"不能 。
动作二:分部积分,把虚功拆成内、外两部分。 从
出发,用散度的乘积法则
移项、对 积分,再对最后一项用散度定理:
边界项按 拆开。
于是得到弱形式 :
左边是内部项——结构力学里就是应变乘应力,即内力虚功 ;右边是体力与边界力做的外力虚功 。弱形式读作内力虚功 = 外力虚功 ,这正是虚功原理。
"降阶"降的是什么。 不是方程的阶——它还是二阶。变的是两个导数的归属:
于是对
通量符号的约定。 若把物理向外通量定义为
其他方程(线弹性、不可压、对流扩散、四阶的梁板问题)走的是同一条路线,但恒等式、边界项含义与分部积分次数各不相同,见附录 1。
弱形式里反复出现"对所有
能量有限:
即
它管的是积分而不是每一点,所以不要求经典导数处处存在——这正是分段多项式能够进入的原因。但允许到什么程度需要说准 :
孤立点上修改取值不影响函数的等价类,但跨界面的间断不是"孤立点"。
试函数空间:谁有资格当候选解。 以一维问题、两端给定
上面式子的意思是:
测试函数空间:允许怎样去"拨动"它。 设
物理上:
为什么连"微小变化"也不允许。
用那把曲线来想:
限制只在
连续弱问题。 至此可以完整写出:寻找
读作: 对每一种允许的虚拟变化
注意这一步还没有做任何离散近似。 从给定强问题建立与之相容的连续弱问题,不是有限维近似;在适当的正则性与边界条件下,强解与弱解相容。有限元的离散误差要到第 4 章、把无限维空间替换成有限维空间时才引入。
为什么普通有限元只要求
在公共节点处函数值连续,但左右斜率可以不同(
物理上: 位移不能断开,但应变可以跳。 材料不能撕裂,所以
这正是降阶的意义: 强形式要
全文唯一的一次近似在这里发生:把解限制在有限维空间里。第 4 章说明这个空间怎么造、凭什么判断解得好不好;第 5 章把它落到实处——单元矩阵、组装、边界条件、求解;第 6 章用一个两单元算例从强形式一路算到边界反作用量,闭合整条主线;第 7 章把同一条流水线原样搬到结构力学上,验证它不依赖于具体的物理问题。
网格、单元与节点。 计算区域被划分成有限个单元:
形函数。 以长度
它们满足节点插值条件
有限元空间。 第 3 章的试函数空间
这里的
要求 里每个函数都真正够格:能量有限、在 上取到规定值。做到这一点的叫协调有限元 ,本文主线就是这一类。非协调元与不连续 Galerkin 故意放弃这一条以换取别的好处,见第 9 章与附录 4。
Galerkin 方法:一个需要说明的选择。 试函数空间是"解的候选形状",测试函数空间是"检验用的探针"——本是两件不同的事,原则上可以各选各的。探针取 Dirac 函数(只在若干个点上检查)就成了配点法;取
Galerkin 法的选择是:探针就用形函数本身,两者取同一组
需要限定: 仅仅采用 Galerkin 方法并不能保证任意问题的矩阵都对称 。矩阵对称来自
本身对称、且试函数与测试函数取自同一空间这两个条件的叠加。对流占优问题会故意打破这种对称(Petrov–Galerkin/SUPG,见附录 4)。
离散问题。 现在可以写出有限元真正在解的问题了。回忆第 3 章的连续弱问题——寻找
把其中的两个空间换成有限维的,就得到离散问题 :寻找
两者逐项对照,只改了三个地方:
| | | |
| | | |
| | 完全不变 |
第三行是关键: 双线性型与载荷项一个字都没动 ,物理内容原封不动。变的只是"在哪里找解"和"用多少根探针检验"。
而"对一切
把
换成"残差"的说法。 定义弱残差泛函
它衡量"外部作用减去内部响应"还差多少,是一个作用在测试函数上的泛函,而不是一个逐点取值的函数——这样定义正是为了避开第 2 章那个麻烦:强形式残差
它与
正交不等于处处为零。 这是全文最重要的理论结论之一:上式只保证残差在有限维测试空间上的投影为零。举个最简单的:在
虽然
探针有限,就一定有看不见的东西,这正是离散误差的来源 (误差究竟有多大,第 8 章用 Céa 引理给出定量的界)。反过来,只有探针足够丰富才能推出残差为零:若
三个层次必须区分。
后两层差在两处:
| 是 |
空间离散误差就在最后这一步引入 ,它同时截断了两样东西:解的搜索范围从
把
但这个全局积分不便直接计算。实际流程是:
第一步:单元矩阵。 积分按单元拆开,在每个单元上计算
其中
第二步:等参映射与数值积分。 实际单元形状不规则,把参考单元映射到物理单元:
几何与场变量使用同一组形函数,称为等参思想 。导数经雅可比矩阵变换:
单元积分用高斯积分:
(取绝对值以不依赖单元定向;实际网格通常约定各单元定向一致、
积分方案与单元稳定性密切相关:积分点不足会产生零能模态(沙漏),某些问题中全积分会导致锁死,减缩积分与选择性积分需与具体单元理论配套(机理见附录 4)。
第三步:组装。 按局部自由度与全局自由度的对应关系累加:
也就是把
实际程序里不会真的构造
物理意义是:相邻单元共享节点自由度、公共节点处满足位移兼容、各单元在公共节点上的内力累加、最终形成整体平衡。由于一个节点只与邻近单元的节点直接耦合,
第四步:边界条件。 Neumann 条件(自然边界条件)不需要像 Dirichlet 那样去约束自由度,但边界积分
对本文这类纯扩散问题,未施加 Dirichlet 条件前
第五步:求解
这一步的展开不在本文范围内。直接法与迭代法的原理、预条件的作用、条件数为何随网格加密而恶化,《矩阵求解》系列有系统讨论,可以参看。
前五章把整条路线讲完了,但还没有算出过一个数。这一章用第 1 章那个一维稳态扩散问题走完全程——从强形式出发,经弱形式、单元矩阵、组装、边界条件,一直算到节点值、单元通量和边界反作用量,最后与解析解逐项对照。
取常数
按前面的对照表,这既是"左端恒温、右端给定热流的导热杆",也是"左端固定、右端受轴向力
① 弱形式。 按第 2 章,寻找
这一步还没有离散 :
② 离散。 取两个长度
③ 单元矩阵。 先算
均布载荷平分到两端节点。
④ 组装。 两个单元的
节点 2 被两个单元共用,所以
注意
⑤ 施加 Dirichlet 条件。
⑥ 求解。
⑦ 与解析解比较。 精确解为
代入
⑧ 回算通量。 由
精确通量为
这不是巧合,而是超收敛 :在合适的条件下,导数类结果在单元内某些特定点上的精度高于其他位置。但要注意限定——本例是常系数、均匀一维网格、真解为二次多项式且积分精确,条件相当理想; 一般问题中超收敛点的存在与位置都依赖于单元类型、网格规则性与解的光滑性,不能想当然地推广 。
顺带澄清一个常见说法:商业软件在积分点上算应力,首要原因是本构积分本来就在那里执行 (塑性、损伤等都以积分点为状态载体),而不单是精度考虑。节点应力通常由外推、恢复或多单元平均得到,其可靠性取决于单元、网格与所用的恢复方法(如 ZZ 恢复,见附录 3)。
⑨ 回算边界反作用量。
代入
校验整体守恒 :外部输入总量为分布源
第 1 到 6 章全程用的是一个标量问题。而工程中最常见的有限元分析是结构力学,未知量是向量位移场。那么前面那套流水线要不要推倒重来?
不要。 换的只是符号,流程一步不改。 下面这张表就是全部的过渡工作:
| |
控制方程:同一个式子的向量版。 第 1 章的标量强形式,其实已经把三件事压缩在一行里——梯度、本构、守恒。把它们拆开写,再逐项换成向量,就是线弹性:
| | | |
| | | |
| | |
左右两列是同一条链子 :待求场 → 取梯度 → 乘材料参数得通量 → 要求通量守恒。区别只是标量换成向量、
三者的性质并不相同:守恒律来自物理,几何关系是纯粹的定义,而本构同样承载物理假设 ——它不是符号上的补充,而是对材料行为的建模,塑性、损伤、黏弹性都是在这一条上做文章。
边界条件同样一一对应:
离散。 位移插值
弱形式即虚功原理。
代入插值即得
与第 5 章的
主线到此已经走通,但走通不等于走对。求解器收敛了,结果就可信吗?这是工程中最容易被忽略的问题,需要模型、表述、离散、代数、物理验证五层证据逐层核对。
结果偏差主要来自这几处:
要判断结果能不能信,需要逐层核对下面五个环节,每层都有各自独立的证据。
第一层:模型层。 几何、材料、载荷和边界条件是否符合实际。 模型错了,加密网格不会带来真实答案 ——这是最常被忽略的一层,也是最难验证的一层。
第二层:表述层(强形式 → 弱形式)。 有限元解的是积分形式,不是原方程,这一步忠实吗?强解一定是弱解;弱解若足够光滑也能还原成强形式,连
这份存在唯一性由 Lax–Milgram 保证,工程上要核对的就是它的三个前提:材料参数保证强制性(
第三层:离散层。 单元类型、网格、积分方式、变量空间是否稳定且收敛。
这一层要回答的是:我用这套网格算出来的解,比理论上能达到的最好结果差多少? 第 4 章已经说明误差从何而来——探针有限,残差里总有看不见的成分;这里要把它量化。
先看后半个问题。
而有限元实际算出的
左边是实际误差,右边是天花板乘一个常数。
这句话的价值在于它换掉了问题 :误差不再取决于方程有多难解,而只取决于
提高精度有三条路线:
需要注意,
第四层:代数层。 线性或非线性方程是否被充分求解。 残差下降只表示离散代数问题被解到了指定精度 ,与物理正确性无关。
第五层:物理验证层。 是否满足守恒、能量平衡,是否与解析解、实验或独立方法对照过。
实用检查清单:
前面八章只处理了线性、静态的问题。随时间演化和非线性各自在这套框架上添了什么,其他有限元方法又分别针对什么困难——以下是一张地图,不再推导,细节留在附录。
动力学增加了什么。 时间一旦进来,方程按时间导数的阶次分成两类。
二阶:结构动力学、波动、声学。 惯性项带来
一致质量矩阵
一阶:瞬态热传导与扩散 ,也就是本文模型问题(第 1 章)加上时间项后的样子:
这里的
两类的共同点是: 空间离散之外还需时间离散 (Newmark、generalized-
非线性增加了什么。 写成残差方程
用 Newton–Raphson 迭代:
其他有限元方法解决什么问题。
有限元真正完成的转换:
弱形式真正解决的问题:
工程可信度真正依赖的条件:
求解器收敛,只说明给定的离散代数问题被解出来了;它既不能证明连续模型正确,也不能代替网格收敛和物理验证。
正文中标注"见附录 x"的几处,在这里补齐。
三步动作不变: 乘测试函数 → 用相应恒等式把导数匀给
其一,边界项代表的物理量随算子改变。
| | ||
| | ||
其二,分部积分次数由算子阶次决定。 对相应的对称椭圆问题、采用原始变量(位移型)弱形式时,
其三,Galerkin 是否仍然最优。 泊松、线弹性这类算子自伴正定,弱形式对应能量泛函,Galerkin 解是能量范数下的最优投影。对流占优时算子不自伴,此性质失效。
普通拉格朗日单元无论几次都只在界面上保持
第 4 章定义的弱残差泛函
其中
这三项恰好构成残差型后验误差估计的度量对象:单元内部残差反映该单元内方程满足得如何,界面跳跃反映相邻单元之间应力/通量的不协调程度,Neumann 项反映边界条件的满足程度。三者加权组合给出各单元的误差指示子,是自适应加密的驱动信号。
另一类是回收型估计 (如 Zienkiewicz–Zhu):把光滑化(恢复)后的梯度当作"精确解",与原始梯度之差即为误差估计。工程软件中的应力光顺与自适应网格多基于此。
网格更密并不自动保证结果正确。离散空间、积分方式与变量组合还必须满足稳定性条件。
速度空间与压力空间必须满足 inf-sup 条件(如 Taylor–Hood 组合)。
有限元的正确性取决于:
罚函数法与 Nitsche 方法不强制测试函数在