如果你学有限元、做结构仿真,或者刚开始啃数值方法的教材,那“Rayleigh-Ritz法”和“Galerkin法”这两个名字一定绕不开。它们一个是变分法的代表,靠“能量极值”找近似解;一个是加权残值法的代表,靠“残差投影”求近似解。两条路看起来起点完全不同,却在很多问题里殊途同归,甚至算出来的方程一模一样。搞懂它们的关系,等于打通了从“解析推导”到“有限元实现”的任督二脉。
这篇文章适合正在学有限元理论、做结构或热分析仿真、以及所有被“试函数”和“弱形式”折磨过的人。我尽量不绕弯子,直接用一维算例把两个方法的推导过程、矩阵形式、边界条件处理全部走一遍,再聊聊它们在有限元里的真实地位和常见坑。看完你至少能回答一个问题:为什么有限元教材默认选Galerkin,但很多结构力学书却偏爱Rayleigh-Ritz。
1. 先搞清楚两个方法解决的同一个问题:微分方程太难解
1.1 真实工程里,精确解基本都是奢侈品
先看一个最简单的一维问题:一根两端固定的杆,受到轴向分布力,求位移场。杆的控制方程写出来是二阶常微分方程,边界条件也就两个点。这种问题存在精确解,手算也不难。但一旦几何形状变成二维曲面、材料不均匀、载荷随空间变化,偏微分方程的精确解基本就不存在了,或者存在你也求不出来。
于是数值近似成了唯一出路。近似的基本套路是:假设解具有某种形式,比如一组基函数的线性组合,然后把“未知函数”变成“有限个未知系数”。问题从“解方程”变成“算系数”。Rayleigh-Ritz法和Galerkin法,本质上是两种“算系数”的准则。
1.2 两类近似思想:变分原理派和加权残差派
工程问题往往对应一个物理量取极值。比如弹簧系统,平衡位置是势能最小的地方;受拉杆的位移场,是总势能取极小值时的位移场。如果能把微分方程等价转化为某个泛函的极值问题,那就可以先假设一个带有未知系数的近似位移场,代入泛函,再对每个系数求偏导令其为零,直接得到一组代数方程。这是Rayleigh-Ritz法的全部逻辑。
Galerkin法走另一条路:直接把近似解代回微分方程,肯定不满足,会剩一个残差。一个很自然的想法是,让这个残差在某种“平均”意义下等于零,也就是把残差投影到一组权函数上,令投影为零。Galerkin法选权函数的方式特别朴素:权函数就是试函数本身。这个选择看起来简单,却让它在有限元里成了统治级玩家。
2. Rayleigh-Ritz法:给能量找最小值
2.1 它的前提:有一个能量泛函
Ritz法的第一步不是写微分方程,而是找泛函。这个泛函通常是系统的势能或余能。比如对于一维问题
[ -u''+u=x,\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),得到的方程正好是 (-u''+u=x)。能写出这个泛函,Ritz法就有得玩。
这个泛函的物理意义很直观:前三项代表系统的应变能和“弹性支撑能”,第四项是外力功的负值。真实解让总势能最小,就像小球滚到碗底。近似解的难点在于,我们不知道“碗”长什么样,只能在某个受限的形状空间里找最低点。
2.2 试函数怎么选、边界条件怎么满足
Ritz法最核心的操作是选试函数。常见做法:
[ \tilde{u}(x)=\sum_{i=1}^{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^2+1}{2}c_1-\frac{1}{\pi}=0 ]
解得
[ c_1=\frac{2}{\pi(\pi^2+1)}\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^2+1)},\quad c_2=\frac{-2}{2\pi(4\pi^2+1)} ]
注意 (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}x=0,\quad i=1,2,\dots,n ]
权函数 (w_i(x)) 怎么选?最经典的选法是 (w_i=\varphi_i),也就是基函数本身,这就是Galerkin法。如果把权函数取成Dirac函数,就成了配点法;取成不连续阶梯函数,就是子域法。Galerkin法在有限元里胜出的原因在于:它既有清晰的数学意义,又能自然推导出对称性良好的代数方程组。
3.2 Galerkin法的完整推导:同一个例子
还是那个方程
[ -u''+u=x,\quad u(0)=u(1)=0 ]
取近似解
[ \tilde{u}(x)=\sum_{i=1}^{n}a_i\sin(i\pi x) ]
残差是
[ R(x)=\sum_{i=1}^{n}a_i(i^2\pi^2+1)\sin(i\pi x)-x ]
Galerkin条件:对每个 (\sin(m\pi x)),令积分
[ \int_0^1 R(x)\sin(m\pi x)\mathrm{d}x=0 ]
利用正交性,左边只剩下 (m) 那一项:
[ a_m(m^2\pi^2+1)\cdot\frac{1}{2}-\frac{(-1)^{m+1}}{m\pi}=0 ]
所以
[ a_m=\frac{2(-1)^{m+1}}{m\pi(m^2\pi^2+1)} ]
看到这里你应该发现了,这和Ritz法得到的系数公式完全一致。取 (m=1),得到 (a_1=2/(\pi(\pi^2+1)));取 (m=2),得到 (a_2=-2/(2\pi(4\pi^2+1)))。一模一样。
3.3 与Ritz法对比:结果一模一样,但路径不同
为什么两条路会得到相同的方程?因为在这个自伴正定问题里,微分方程对应泛函极值,Ritz法的极值条件 (\partial J/\partial c_i=0) 和Galerkin法的投影条件 (\int R\varphi_i=0) 经过分部积分后是等价的。具体说,Galerkin法里如果对含二阶导数的项做一次分部积分,就会得到弱形式:
[ \int_0^1\left(u'v'+uv-xv\right)\mathrm{d}x=0 ]
这里 (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_1+N_2(x)u_2 ]
形函数是
[ N_1=\frac{x_2-x}{h},\quad N_2=\frac{x-x_1}{h} ]
Galerkin弱形式是
[ \int_0^1\left(u'v'+uv\right)\mathrm{d}x=\int_0^1 xv,\mathrm{d}x ]
取 (v=N_i),把插值代入,得到单元矩阵:
[ \mathbf{K}^e=\frac{1}{h}\begin{bmatrix}1&-1\-1&1\end{bmatrix}+\frac{h}{6}\begin{bmatrix}2&1\1&2\end{bmatrix} ]
第一项叫刚度矩阵,来自 (u'v');第二项叫质量矩阵或反应项,来自 (uv)。把每个单元的矩阵组装成全局矩阵,再处理端点约束,解线性方程组就得到节点位移。整个过程里,Galerkin弱形式是推导的发动机,形函数是试函数空间的“分片版本”。
对比第2节的Ritz法:那里用的是全局三角函数基函数,条件好、系数解耦;有限元用的是分片线性基函数,条件差但几何适应性强。三角函数适合简单规则区域,遇到复杂几何就废了;分片线性插值虽然精度不高,但可以在任意复杂几何区域上加密、贴合,这就是有限元称霸工程仿真的底层优势。
4.3 当Ritz法和Galerkin法不再等价:非自伴问题
前面说两者等价,前提是自伴正定算子。如果算子不对称,比如对流扩散方程
[ -u''+\epsilon u'+u=f ]
一阶导项让算子失去对称性。这时候找不到一个简单的能量泛函做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),它在 (x=1) 处不为零,代入泛函求极值,得到的位移场在边界上会出现虚假的非零值,而且整体误差会被“污染”。
检验方法很简单:构造完试函数后,先把端点和已知位移约束点代进去,逐项确认每个基函数都满足本质边界条件。自然边界条件可以不管,那里让残差自己去“说话”。这个原则在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法兜底,配合合适的稳定化修正依然能拿下工程问题。把这个判断标准记在脑子里,比记住任何公式都管用。