2026/10/21 14:40:40

Rayleigh-Ritz法与Galerkin法深度对比:从变分原理到有限元实现

Rayleigh-Ritz法与Galerkin法深度对比:从变分原理到有限元实现 如果你学有限元、做结构仿真或者刚开始啃数值方法的教材那“Rayleigh-Ritz法”和“Galerkin法”这两个名字一定绕不开。它们一个是变分法的代表靠“能量极值”找近似解一个是加权残值法的代表靠“残差投影”求近似解。两条路看起来起点完全不同却在很多问题里殊途同归甚至算出来的方程一模一样。搞懂它们的关系等于打通了从“解析推导”到“有限元实现”的任督二脉。这篇文章适合正在学有限元理论、做结构或热分析仿真、以及所有被“试函数”和“弱形式”折磨过的人。我尽量不绕弯子直接用一维算例把两个方法的推导过程、矩阵形式、边界条件处理全部走一遍再聊聊它们在有限元里的真实地位和常见坑。看完你至少能回答一个问题为什么有限元教材默认选Galerkin但很多结构力学书却偏爱Rayleigh-Ritz。1. 先搞清楚两个方法解决的同一个问题微分方程太难解1.1 真实工程里精确解基本都是奢侈品先看一个最简单的一维问题一根两端固定的杆受到轴向分布力求位移场。杆的控制方程写出来是二阶常微分方程边界条件也就两个点。这种问题存在精确解手算也不难。但一旦几何形状变成二维曲面、材料不均匀、载荷随空间变化偏微分方程的精确解基本就不存在了或者存在你也求不出来。于是数值近似成了唯一出路。近似的基本套路是假设解具有某种形式比如一组基函数的线性组合然后把“未知函数”变成“有限个未知系数”。问题从“解方程”变成“算系数”。Rayleigh-Ritz法和Galerkin法本质上是两种“算系数”的准则。1.2 两类近似思想变分原理派和加权残差派工程问题往往对应一个物理量取极值。比如弹簧系统平衡位置是势能最小的地方受拉杆的位移场是总势能取极小值时的位移场。如果能把微分方程等价转化为某个泛函的极值问题那就可以先假设一个带有未知系数的近似位移场代入泛函再对每个系数求偏导令其为零直接得到一组代数方程。这是Rayleigh-Ritz法的全部逻辑。Galerkin法走另一条路直接把近似解代回微分方程肯定不满足会剩一个残差。一个很自然的想法是让这个残差在某种“平均”意义下等于零也就是把残差投影到一组权函数上令投影为零。Galerkin法选权函数的方式特别朴素权函数就是试函数本身。这个选择看起来简单却让它在有限元里成了统治级玩家。2. Rayleigh-Ritz法给能量找最小值2.1 它的前提有一个能量泛函Ritz法的第一步不是写微分方程而是找泛函。这个泛函通常是系统的势能或余能。比如对于一维问题[ -uux,\quad u(0)u(1)0 ]对应的泛函是[ J(u)\int_0^1\left(\frac{1}{2}(u)^2\frac{1}{2}u^2-xu\right)\mathrm{d}x ]你可能会问这个泛函怎么来的一个可靠方式是“反推”泛函的Euler-Lagrange方程就是原微分方程。也就是说你把泛函里的被积函数看成 (F(x,u,u))代 (F_u-\frac{\mathrm{d}}{\mathrm{d}x}F_{u}0)得到的方程正好是 (-uux)。能写出这个泛函Ritz法就有得玩。这个泛函的物理意义很直观前三项代表系统的应变能和“弹性支撑能”第四项是外力功的负值。真实解让总势能最小就像小球滚到碗底。近似解的难点在于我们不知道“碗”长什么样只能在某个受限的形状空间里找最低点。2.2 试函数怎么选、边界条件怎么满足Ritz法最核心的操作是选试函数。常见做法[ \tilde{u}(x)\sum_{i1}^{n}c_i\varphi_i(x) ](\varphi_i(x)) 是基函数(c_i) 是待定系数。选择基函数的原则是必须逐项满足强制边界条件也就是本质边界条件比如本例的 (u(0)u(1)0)。尽量满足光滑性要求至少保证泛函中的积分有意义。正交性越好联立方程越容易解。对于这个例子最方便的一组基函数是 (\sin(i\pi x))。每个 (\sin(i\pi x)) 在两个端点都是零而且不同频率之间正交算起来非常舒服。注意不需要让每个基函数满足自然边界条件比如自由端的力的边界。自然边界条件在变分原理里会被自动满足。很多人初学Ritz法时试图让试函数满足所有边界条件结果反而把试函数空间限制得太小精度下降这是典型的过度设计。2.3 完整推导一维杆件问题的Ritz解取一阶近似[ \tilde{u}_1(x)c_1\sin(\pi x) ]代入泛函利用积分公式[ \int_0^1\sin^2(\pi x)\mathrm{d}x\frac{1}{2},\quad \int_0^1(\sin(\pi x))^2\mathrm{d}x\frac{\pi^2}{2},\quad \int_0^1x\sin(\pi x)\mathrm{d}x\frac{1}{\pi} ]得到[ J(c_1)\left(\frac{\pi^2}{4}\frac{1}{4}\right)c_1^2-\frac{c_1}{\pi} ]对 (c_1) 求导并令其为零[ \frac{\partial J}{\partial c_1}\frac{\pi^21}{2}c_1-\frac{1}{\pi}0 ]解得[ c_1\frac{2}{\pi(\pi^21)}\approx 0.0585 ]取二阶近似[ \tilde{u}_2(x)c_1\sin(\pi x)c_2\sin(2\pi x) ]由于 (\sin(\pi x)) 和 (\sin(2\pi x)) 在区间上正交交叉项全部消失系数直接解耦[ c_1\frac{2}{\pi(\pi^21)},\quad c_2\frac{-2}{2\pi(4\pi^21)} ]注意 (c_2) 是负的说明高次项在修正一阶近似。这两个系数一算近似位移场就确定了。整个过程只有积分、求导、解一元方程没有任何微分方程求解器的介入这就是变分法的魅力。3. Galerkin法让残差在加权平均意义下为零3.1 加权残值思想误差也要“投影”Ritz法起点是泛函。但如果一个物理问题找不到泛函怎么办比如非保守系统、对流占优的对流扩散问题这种情况变分原理可能不存在或者构造出来的泛函稳定性极差。这时候需要更直接的近似准则写出微分方程残差逼它变小。具体做法是把近似解代回微分方程得到残差[ R(x)\tilde{u}(x)\tilde{u}(x)-x ]如果 (\tilde{u}) 是精确解残差处处为零。但近似解做不到处处为零那就让残差在“加权平均”的意义下为零[ \int_0^1 R(x)w_i(x)\mathrm{d}x0,\quad i1,2,\dots,n ]权函数 (w_i(x)) 怎么选最经典的选法是 (w_i\varphi_i)也就是基函数本身这就是Galerkin法。如果把权函数取成Dirac函数就成了配点法取成不连续阶梯函数就是子域法。Galerkin法在有限元里胜出的原因在于它既有清晰的数学意义又能自然推导出对称性良好的代数方程组。3.2 Galerkin法的完整推导同一个例子还是那个方程[ -uux,\quad u(0)u(1)0 ]取近似解[ \tilde{u}(x)\sum_{i1}^{n}a_i\sin(i\pi x) ]残差是[ R(x)\sum_{i1}^{n}a_i(i^2\pi^21)\sin(i\pi x)-x ]Galerkin条件对每个 (\sin(m\pi x))令积分[ \int_0^1 R(x)\sin(m\pi x)\mathrm{d}x0 ]利用正交性左边只剩下 (m) 那一项[ a_m(m^2\pi^21)\cdot\frac{1}{2}-\frac{(-1)^{m1}}{m\pi}0 ]所以[ a_m\frac{2(-1)^{m1}}{m\pi(m^2\pi^21)} ]看到这里你应该发现了这和Ritz法得到的系数公式完全一致。取 (m1)得到 (a_12/(\pi(\pi^21)))取 (m2)得到 (a_2-2/(2\pi(4\pi^21)))。一模一样。3.3 与Ritz法对比结果一模一样但路径不同为什么两条路会得到相同的方程因为在这个自伴正定问题里微分方程对应泛函极值Ritz法的极值条件 (\partial J/\partial c_i0) 和Galerkin法的投影条件 (\int R\varphi_i0) 经过分部积分后是等价的。具体说Galerkin法里如果对含二阶导数的项做一次分部积分就会得到弱形式[ \int_0^1\left(uvuv-xv\right)\mathrm{d}x0 ]这里 (v) 取的是基函数。而Ritz法极值条件展开后也是这个式子。所以结论是对于自伴正定算子、同一组试函数、本质边界条件相同Ritz法和Galerkin法给出相同的近似解。但路径不同意味着适用范围不同。Galerkin法不需要先构造泛函只要方程能写出来就能做加权残差这让它远不止适用于变分问题。后面你会看到Galerkin法的这个“糙”劲儿正是它在有限元里称王的原因。4. 两个方法在有限元里的地位与取舍4.1 为什么有限元几乎都用Galerkin而不用Ritz有限元方法每天被无数人使用但细看它的理论源头你会发现底层逻辑是Galerkin法。原因有三点。第一泛函不是谁都能找到的。很多实际问题特别是非对称算子控制的问题压根没有现成能量泛函。Ritz法在第一步就卡住了。Galerkin法不问泛函在不在直接拿强形式方程做投影通用性完胜。第二Galerkin弱形式对分片函数的要求更低。这是有限元能成功的关键。对于二阶方程强形式要求试探函数二阶连续可导。但如果对二阶导数项做一次分部积分得到弱形式后积分里最多只有一阶导数插值函数只要分片一阶连续甚至一阶平方可积就够了。这样工程上最常用的分片线性函数就能上阵。Ritz法其实也会得到同样的弱形式但它的推导前提是存在泛函Galerkin法直接把弱形式作为起点数学上少了很多包袱。第三弱形式的边界条件处理是自然发生的。在弱形式推导过程中原来强形式里的自然边界条件会自己冒出来只需要在边界积分项里代入给定值就行。Galerkin法把“本质边界条件”和“自然边界条件”的分工理顺了这正是有限元前处理里复杂边界条件的处理基础。4.2 一维有限元里的单元矩阵是怎么来的既然提到有限元我用一维杆单元展示一下Galerkin弱形式如何变成单元刚度矩阵。这是理解“Galerkin → 有限元”的关键一跳。把区间划分成单元每个单元长度 (h)。单元内用线性插值[ u(x)N_1(x)u_1N_2(x)u_2 ]形函数是[ N_1\frac{x_2-x}{h},\quad N_2\frac{x-x_1}{h} ]Galerkin弱形式是[ \int_0^1\left(uvuv\right)\mathrm{d}x\int_0^1 xv,\mathrm{d}x ]取 (vN_i)把插值代入得到单元矩阵[ \mathbf{K}^e\frac{1}{h}\begin{bmatrix}1-1\-11\end{bmatrix}\frac{h}{6}\begin{bmatrix}21\12\end{bmatrix} ]第一项叫刚度矩阵来自 (uv)第二项叫质量矩阵或反应项来自 (uv)。把每个单元的矩阵组装成全局矩阵再处理端点约束解线性方程组就得到节点位移。整个过程里Galerkin弱形式是推导的发动机形函数是试函数空间的“分片版本”。对比第2节的Ritz法那里用的是全局三角函数基函数条件好、系数解耦有限元用的是分片线性基函数条件差但几何适应性强。三角函数适合简单规则区域遇到复杂几何就废了分片线性插值虽然精度不高但可以在任意复杂几何区域上加密、贴合这就是有限元称霸工程仿真的底层优势。4.3 当Ritz法和Galerkin法不再等价非自伴问题前面说两者等价前提是自伴正定算子。如果算子不对称比如对流扩散方程[ -u\epsilon uuf ]一阶导项让算子失去对称性。这时候找不到一个简单的能量泛函做Ritz法强行构造会很别扭。但Galerkin法依然能用写出残差令残差对基函数投影为零。刚这么干也会遇到新问题当对流项很强、(\epsilon) 很小时标准Galerkin法会在边界层附近产生剧烈振荡。于是出现了Petrov-Galerkin法权函数不再等于试函数而是给试函数加上一个“迎风”修正项让误差被“推”向上游抑制振荡。还有Galerkin/Least Squares方法把最小二乘项加进投影方程增强稳定性。这些都属于Galerkin思想体系的扩展。Ritz法在这种场景基本帮不上忙因为泛函本身就不存在或极不稳定。4.4 Ritz法在现代应用里并未过时虽然Galerkin在有限元里是主流Ritz法依然在结构力学和动力学里活得很好。原因是它能提供能量视角近似解的势能总是高于或等于真实解的势能刚度偏大位移偏小。这意味着Ritz法给出的固有频率是真实频率的上界。做结构优化、刚度评估时这个“上界/下界”信息非常有用。另外在弹性力学、板的弯曲、屈曲分析等经典问题里Ritz法的物理图像特别直观。工程师先用能量原理写出系统的总势能再选一组满足几何边界条件的挠度函数求极值系数直接得到变形和稳定性临界载荷。整个过程可以用手算完成非常适合方案阶段的快速估算。所以在实际工作中Ritz法适合“有能量背景、形状相对简单”的问题Galerkin法适合“任意方程、任意几何、大规模数值计算”的问题。二者不是替代关系而是互补关系。5. 实操中的常见问题与避坑清单5.1 边界条件没满足算出来全是错的初学Ritz法最容易犯的错误是选试函数时光注意函数长得好看忘了检查强制边界条件。比如本例如果选多项式 (\varphi(x)1-x^2)它在 (x1) 处不为零代入泛函求极值得到的位移场在边界上会出现虚假的非零值而且整体误差会被“污染”。检验方法很简单构造完试函数后先把端点和已知位移约束点代进去逐项确认每个基函数都满足本质边界条件。自然边界条件可以不管那里让残差自己去“说话”。这个原则在Galerkin法里同样适用弱形式的测试函数空间必须限制在“边界上为零”的空间里否则边界项会带来未知的通量方程就合不拢了。5.2 试函数选择不当收敛慢到你怀疑人生用全局基函数做近似时基函数的性质直接决定迭代速度。三角函数在周期性和光滑问题上效率极高多项式在少数几项时也能用但遇到边界层问题就拉了跨。举个例子如果精确解在端点附近有一个陡峭的变化层用光滑的三角函数去逼近需要取很多项才能在局部“追上”梯度的变化如果换用带局部加密能力的分片插值在陡峭区域把网格加密问题就迎刃而解。这也是有限元对全局Ritz法的最大优势试函数不是全局的而是局部的想在哪里加分辨率就在哪里补节点。实操建议做Ritz法习题时先用最少项数算出一阶近似再增加项数看结果是否稳定变化。如果系数在高阶项上仍然很大说明试函数空间和真实解的形状匹配度差换一组带边界层特征的基函数往往比硬加项数有效。5.3 什么时候Ritz和Galerkin给出的矩阵不一样前面证明了二者在一个自伴正定例子里完全等价。但在实际有限元实现里如果你把Galerkin法的弱形式直接离散得到的方程与Ritz法离散后得到的方程在“对称正定”、“低阶项来源”上完全一致如果问题不对称Ritz法可能根本写不出泛函或者写出的泛函极值不是最小而是驻点这时两者就失去可比性。还有一个容易混淆的点用Galerkin法处理强形式时如果不对二阶导数做分部积分直接对二阶导数项做加权积分那就要求形函数二阶可导线性分片函数直接不能用而且矩阵不一定对称。这是新手调试代码时常见的坑弱形式里的积分符号和强形式里的积分符号完全不是一回事。凡涉及二阶微分算子请一律先做分部积分再离散。5.4 常见问题速查表现象可能原因排查与解决近似解边界值不满足给定位移试函数未满足本质边界条件逐基函数检查边界值替换不满足的基函数增加项数后解振荡试函数与真实解形状不匹配改用带局部特征或分段形式的试函数单元矩阵不对称直接离散了含二阶导数的强形式对二阶导数项做分部积分使用弱形式对流项强时数值振荡标准Galerkin法失去稳定换成Petrov-Galerkin或加稳定化项Ritz法和Galerkin结果不一致算子非自伴泛函不存在或非凸改用Galerkin法并分析稳定性N增大但结果不收敛基函数系不完备确认基函数构成空间的一组完密集检查函数光滑性5.5 代码实现时的三个小技巧如果自己写程序实现这两个方法有几点经验值得记下。积分尽量用解析积分或高斯积分别用等距节点的梯形公式去硬算三角函数精度不够时很难判断是方法不对还是积分误差在捣乱。线性方程组的系数矩阵如果是Ritz法生成的往往对称正定直接上Cholesky分解Galerkin法生成的矩阵如果不稳定先检查测试函数空间是否满足LBB条件或者是否有必要加稳定化项。遇到复杂几何别硬用全局Ritz法。老老实实剖网格、组装单元矩阵走有限元路线。Ritz法适合教你好概念Galerkin法才是干重活的工具。6. 我的个人体会把两个方法通篇推下来我最大的体会是学数值方法不能只背“Ritz是变分法Galerkin是加权残值法”这种标签。要亲手做一个算例把同样的方程用两条路线各解一遍看到系数一模一样、泛函和残差分别趋向最小值和零才算真正打通了关节。我个人强烈建议你用文中的例子亲手算一遍从选 (\sin(\pi x)) 开始做完一阶做二阶比较近似解和精确解 (\frac{\sinh x}{\sinh 1}-x) 在区间中点的误差。你会直观看到一阶近似的中点位误差在几个百分点量级二阶近似迅速下降。这种“手算敏感度”是任何有限元软件都不会教你的。最后再分享一个小技巧当你面对一个新问题不知道用什么近似方法时先问“这个问题有没有一个自然的能量泛函”。有Ritz法给你一个稳定、对称、物理意义明确的近似没有Galerkin法兜底配合合适的稳定化修正依然能拿下工程问题。把这个判断标准记在脑子里比记住任何公式都管用。