跳到正文
格致开物MATHWIKI

伽辽金法

伽辽金法(Galerkin method)在有限维试探空间中选择近似解,并要求方程残差对同一空间中的所有测试函数为零。它把一个函数方程变为系数方程,是有限元和许多谱方法的共同框架。残差正交必须说明所用的弱形式、内积和测试空间,不能只说“误差取平均为零”。

只用一个正弦函数逼近

考虑 −u″=1、u(0)=u(1)=0,精确解为 u=x(1−x)/2。取满足端点条件的试探函数 u1=csin⁡πx。弱形式要求 ∫01u1′(x)v′(x)dx=∫01v(x)dx 对测试空间中的函数成立。该空间只有一个方向,所以取 v=sin⁡πx 即够。左边为 cπ2/2,右边为 2/π,得到 u1(x)=4π3sin⁡πx. 其中点约为 0.129006138,接近真值 0.125,却不是通过中点插值得到的。系数由全区间的弱方程确定。

一个与两个奇数正弦模式的 Galerkin 近似和二次真解对比
用sin(πx)及sin(3πx)作为全局基。两个模式的系数来自弱方程,增加的模式改善整个函数的能量逼近,而不是只拟合图上一个点。

有限维弱问题

设 H 为实 Hilbert 空间,弱问题为求 u∈H,使 a(u,v)=ℓ(v)∀v∈H. 取有限维子空间 Vh⊂H,Galerkin 近似满足同一方程,但仅测试 vh∈Vh。若基为 ϕ1,…,ϕm,令 uh=∑jcjϕj,则 ∑j=1ma(ϕj,ϕi)cj=ℓ(ϕi),i=1,…,m. 连续分片基给出有限元法,全局正交基可给出谱方法。二者的基函数与实现不同,但此处同属相同弱投影原则。平衡通量讲义中的有限元弱形式也展示了同一 Galerkin 结构。[1]

Céa 估计的证明

假设双线性型满足有界性 |a(w,v)|≤M‖w‖H‖v‖H,以及强制性 a(v,v)≥α‖v‖H2,其中 M<∞,α>0;ℓ 是连续线性泛函。这些条件保证弱问题和有限维问题各有唯一解。

将两份弱方程相减,得到 Galerkin 正交 a(u−uh,vh)=0∀vh∈Vh. 记 e=u−uh,任取 wh∈Vh。因为 uh−wh∈Vh,有 α‖e‖H2≤a(e,e)=a(e,u−wh)+a(e,wh−uh)=a(e,u−wh)≤M‖e‖H‖u−wh‖H. 若误差非零,约去其范数,再对 wh 取下确界,得到 ‖u−uh‖H≤Mαinfwh∈Vh‖u−wh‖H. 误差为零时不等式也成立。这说明离散误差不超过空间最佳逼近的一个固定倍数。对称正定的情形,用 a 定义能量内积,正交展开进一步给出常数为一的最佳逼近;一般非对称情形不能直接称为正交投影最短距离。

多个模式与可复算误差

对 Poisson 例子,正弦导数的正交性使不同模式解耦。对奇数 k,载荷积分为 2/(kπ),刚度为 k2π2/2,所以系数为 4/(k3π3);偶数模式的载荷为零。取 k=1,3 得 u2(x)=4π3sin⁡πx+427π3sin⁡3πx. 中点为 104/(27π3)。由于 ‖u′‖L22=1/12,Galerkin 正交给出一个无需数值微分的误差式: ‖u′−uh′‖L22=112−∑k∈𝒦8k4π4, 其中 𝒦 是保留的奇数频率。增加模式后能量误差不增;点值误差则不一定每个点都单调改善。

有解变式只用 ϕ=x(1−x) 作基。计算 ∫ϕ'2=1/3、∫ϕ=1/6,系数为 1/2,此时近似恰等于真解。一个精心匹配的基可能比若干不匹配的基更有效,但实际计算通常并不知道真解形式,需要系统可扩展的空间。

正弦 Galerkin 的可运行实现

代码只针对本例的常数右端,使用已精确计算的模态系数。输入一组互异正整数频率,返回求值函数及系数,不修改输入。构造和每次求值均需 O(m) 时间,存储为 O(m);一般非对角 Galerkin 矩阵还需装配和线性求解成本。

Python 3
import math


def poisson_sine_galerkin(frequencies):
    ks = list(frequencies)
    if not ks or any(not isinstance(k, int) or k <= 0 for k in ks) or len(set(ks)) != len(ks):
        raise ValueError("distinct positive integer frequencies required")
    coefficients = {k: 4/(k**3*math.pi**3) if k % 2 else 0.0 for k in ks}
    def solution(x):
        x = float(x)
        if not math.isfinite(x) or not 0 <= x <= 1:
            raise ValueError("x must lie in [0,1]")
        return sum(c*math.sin(k*math.pi*x) for k, c in coefficients.items())
    return solution, coefficients


one, _ = poisson_sine_galerkin([1])
two, _ = poisson_sine_galerkin([1, 3])
print(one(0.5), two(0.5))
print(4/math.pi**3, 104/(27*math.pi**3))  # independent midpoint formulas

不满足强制性时的边界

对流占优方程、不可压流的混合形式或约束系统,直接使用同一试探测试空间可能不稳定。Petrov–Galerkin 允许不同测试空间,混合方法需检查 inf-sup 条件,稳定化则修改相应形式。这些方法仍可用弱方程组织,但不能无条件使用上面的强制性估计。数值积分近似和边界实现也可能引入额外一致性误差,需要在理论与验收中列出。

参考资料

  1. ↑ Martin Vohralík. A posteriori numerical analysis based on the method of equilibrated fluxes,§2.2—2.4,连续弱解、有限元近似和能量范数。