2. 一维Poisson方程:强形式与弱形式推导,边界条件的引入
好,咱们正式开始动手了。这一章是整个有限元求解的基石——从一维Poisson方程出发,把强形式、弱形式、边界条件这些概念彻底理清楚。我当年刚学有限元时,就是被这些“形式”绕晕的。后来发现,说白了就三件事:方程怎么列、怎么积分、边界怎么处理。
2.1 问题定义:一维Poisson方程
考虑一个最简单的物理场景——一根长度为L的细杆,内部有热源分布,两端保持固定温度。稳态下,温度分布u(x)满足一维Poisson方程:
-d²u/dx² = f(x), x ∈ (0, L)
其中f(x)是已知的热源项。边界条件我们分两类讨论:
- Dirichlet边界:u(0) = u₀, u(L) = u_L(温度给定)
- Neumann边界:du/dx(0) = q₀(热流给定)
我在项目中遇到过不少新手,一上来就写代码求解,结果边界条件加错了,算出来的温度场完全不对。所以咱们先把数学底子打牢。
2.2 强形式(Strong Form)
强形式就是原始微分方程加上边界条件。它要求解u(x)在每一点都满足方程,这对解的光滑性要求很高——u必须是二阶可导的连续函数。
强形式完整表述:
控制方程:-d²u/dx² = f(x), x ∈ (0, L)
边界条件:u(0) = u₀, u(L) = u_L
要求:u ∈ C²(0, L) ∩ C⁰[0, L]
你想想看,实际工程中哪有这么理想的函数?杆件材料不均匀、截面突变、载荷不连续……强形式在数值求解时非常困难。这就是为什么我们需要弱形式。
2.3 弱形式(Weak Form)的推导
弱形式的核心思想:不要求每一点都满足方程,只要求在“平均意义”上满足。怎么实现?用加权残量法。
具体步骤我带你走一遍:
- 引入权函数:将控制方程乘以一个任意权函数v(x),然后在全域积分
- 分部积分:降低对u的导数阶数,同时自然引入边界项
- 施加边界条件:将已知边界值代入
推导过程如下:
∫₀ᴸ v(x) · [-d²u/dx²] dx = ∫₀ᴸ v(x) · f(x) dx
分部积分:
∫₀ᴸ (dv/dx)(du/dx) dx - [v · du/dx]₀ᴸ = ∫₀ᴸ v · f dx
整理得弱形式:
∫₀ᴸ (dv/dx)(du/dx) dx = ∫₀ᴸ v · f dx + v(L) · du/dx(L) - v(0) · du/dx(0)
个人经验:分部积分这一步是核心。它把对u的二阶导数降为一阶,这样我们就可以用线性插值函数(C⁰连续)来近似u了。我早期做热-力耦合分析时,这一步理解透了,后面处理复杂边界就顺了。
2.4 边界条件的引入方式
边界条件在弱形式中分两种方式引入,这是最容易出错的地方。
| 边界类型 | 数学表述 | 弱形式处理 | 我的建议 |
|---|---|---|---|
| Dirichlet(本质边界) | u = ū | 强制施加到试探函数空间;权函数在边界上取零 | 先处理,再组装矩阵 |
| Neumann(自然边界) | du/dx = q̄ | 直接代入弱形式边界项 | 后处理,加到右端项 |
| Robin(混合边界) | du/dx + αu = β | 代入后产生附加刚度项 | 同时影响矩阵和右端项 |
嗯,这里要注意:Dirichlet边界是“强制”的,你必须修改刚度矩阵和右端向量来满足它。而Neumann边界是“自然”的,它自动出现在弱形式的边界积分项中,你只需要把已知值代进去就行。
我曾经踩过的坑:做一维热传导时,把Neumann边界条件直接加到刚度矩阵里了,结果算出来的温度场在边界处出现异常跳跃。后来排查了半天才发现——Neumann边界只影响右端项,不影响矩阵。记住这个教训。
2.5 知识体系结构图
下面这张图把本章的核心逻辑串起来了。我建议你把它当作思维导图来用。
2.6 一个完整的推导示例
咱们用具体边界条件走一遍完整流程。假设:
- 杆长L = 1,热源f(x) = 2
- 左端温度u(0) = 0(Dirichlet)
- 右端热流du/dx(1) = 1(Neumann)
Step 1:写出强形式
-d²u/dx² = 2, x ∈ (0,1)
u(0) = 0
du/dx(1) = 1
Step 2:推导弱形式
∫₀¹ v·(-d²u/dx²) dx = ∫₀¹ v·2 dx
分部积分:
∫₀¹ (dv/dx)(du/dx) dx - [v·du/dx]₀¹ = ∫₀¹ 2v dx
代入边界:
v(1)·du/dx(1) - v(0)·du/dx(0) = v(1)·1 - v(0)·du/dx(0)
由于u(0)=0是本质边界,权函数v(0)=0,所以v(0)·du/dx(0)=0
最终弱形式:
∫₀¹ (dv/dx)(du/dx) dx = ∫₀¹ 2v dx + v(1)·1
关键观察:
- Neumann边界条件(du/dx(1)=1)直接出现在右端项中
- Dirichlet边界条件(u(0)=0)通过限制试探函数空间来施加
- 权函数v在Dirichlet边界上必须取零
Step 3:解析解验证
对强形式积分两次:
u(x) = -x² + C₁x + C₂
代入边界条件:
u(0) = 0 → C₂ = 0
du/dx(1) = -2 + C₁ = 1 → C₁ = 3
解析解:u(x) = -x² + 3x
这个解析解可以用来验证后续有限元代码的正确性。我每次开发新程序,都会先用这种简单例子做验证——确保弱形式推导和边界条件施加都没问题,再上复杂模型。
2.7 常见误区与避坑指南
误区1:认为弱形式比强形式“弱”所以精度低。其实不是——弱形式放宽了对解的光滑性要求,但通过选择合适的权函数空间,可以保证解在能量范数下收敛到真解。
误区2:忘记在Dirichlet边界上限制权函数。如果权函数v在Dirichlet边界上不为零,会导致刚度矩阵奇异,求解失败。
我的调试习惯:每次写完弱形式代码,先用一个已知解析解的问题做测试。如果误差在10⁻⁶量级,说明推导和实现都正确。如果误差大,优先检查边界条件施加是否正确——这是80%问题的根源。
好了,这一章的内容就到这儿。强形式到弱形式的推导,边界条件的分类与引入方式,这些是后续所有章节的基础。你把这些吃透了,后面处理复杂边界条件就会轻松很多。