微分方程数值解 第六章(1)
有限元方法
一、有限元基本步骤
1、变分形式:将微分方程(强形式)转化为变分问题(弱形式,如极小位能原理 )
2、区域剖分:将求解区间 / 区域划分为有限个子单元(如线段剖分为小区间 $Ii = [x{i-1}, x_i]$ )
3、构造有限维子空间:在剖分单元上定义基函数(如分片线性函数 ),构建解空间 $U_h$
4、形成有限元方程:将变分问题离散化,得到线性方程组(刚度矩阵 + 载荷向量 )
5、求解有限元方程:数值求解线性方程组,得到近似解
ODE 边值问题示例(Dirichlet 边界)
微分方程(强形式):
变分形式(极小位能原理):
找 $u \in H_E^1 = \left\{ u \in H^1(a,b) \mid u(a)=0 \right\}$ 使总位能
极小化
有限元离散(Ritz 法):
区域剖分:将 $[a,b]$ 划分为 $n$ 个单元 $I_i = [x_{i-1}, x_i]$ ,步长 $h_i = x_i - x_{i-1}$,最大步长 $h = \max h_i$
子空间 $U_h$:取 $U_h \subset H_E^1$ ,由分片线性基函数(在每个单元上线性,节点处满足边界条件 )张成
一、基函数与插值思想
有限元解 $u_h$ 是 $n$ 维子空间的函数,通过节点插值构造基函数:
区域剖分后,在单元 $I_i = [x_{i-1}, x_i]$ 上,用节点值 $u_{i-1}, u_i$ 定义分片线性插值函数。
二、分段 Lagrange 插值(单元层次)
对单元 $I_i = [x_{i-1}, x_i]$(步长 $h_i = x_i - x_{i-1}$ ),插值函数为:
标准化:引入参考单元 $[0,1]$,令 $\displaystyle \xi = \frac{x - x_{i-1}}{h_i}$,则插值函数简化为:
对应基函数 $N_0(\xi) = 1 - \xi$,$N_1(\xi) = \xi$(单元上的 Lagrange 基 )
三、整体基函数(全域拼接)
将单元基函数拼接成全域基函数 $y_i(x)$,满足:
在节点 $x_j$ 处,$y_i(x_j) = \delta_{ij}$(Kronecker delta,仅在第 $i$ 个节点取 1,其余为 0 )
全域解表示为
其中 $u_i$ 是节点 $x_i$ 处的函数值
基函数 $y_i(x)$ 是分片线性的 “帽状函数”:
在单元 $[x_{i-1}, x_i]$ 上,$\displaystyle y_i(x) = \frac{x - x_{i-1}}{h_i}$;
在单元 $[x_i, x_{i+1}]$ 上,$\displaystyle y_i(x) = \frac{x_{i+1} - x}{h_{i+1}}$;
仅在节点 $x_i$ 附近非零,满足 $y_i(x_j) = \delta_{ij}$(Kronecker delta )
四、能量泛函离散(以 $J(u_h)$ 为例)
总位能泛函 $J(u_h)$ 分解为:
导数计算:
在单元 $[x_{i-1}, x_i]$ 上,$u_h = u_{i-1} N_0^i(\xi) + u_i N_1^i(\xi)$($\xi$ 是参考坐标 ),求导得:
积分离散:
对 $\displaystyle \int_{a}^{b} (u_h’)^2 dx$ 分片积分,得:
同理处理 $u_h^2$ 和 $f u_h$ 的积分,最终将 $J(u_h)$ 转化为节点值 $u_i$ 的二次函数
五、梯度与刚度矩阵
对 $J(u_h)$ 关于 $u_j$ 求偏导并令其为 0,得到梯度 $\nabla J(u_h) = K \mathbf{u} - \mathbf{f}$ ,其中
$K$ 是刚度矩阵(由基函数导数的积分确定,对称正定 );
$\mathbf{u} = (u_1, \dots, u_n)^T$ 是节点值向量;
$\mathbf{f}$ 是载荷向量(由 $f$ 与基函数的积分确定 )
六、有限元方程构建(能量泛函离散)
对边值问题 $-u’’ + u = f$($u(a)=0, u(b)=0$ ),总位能泛函 $J(u_h)$ 分解为:
刚度项 $K(u_h)$:由 $u_h’$ 的积分导出,对应矩阵 $K$(刚度矩阵 )
质量项 $M(u_h)$:由 $u_h^2$ 的积分导出,对应矩阵 $M$(质量矩阵 )
载荷项 $F(u_h)$ :由 $f u_h$ 的积分导出,对应向量 $B$(载荷向量 )
得有限元方程:
七、与有限差分方法(FDM)对比
对同一 ODE 边值问题,FDM 直接离散微分算子:
$h$ 是步长,$u_j$ 是节点 $x_j$ 处的近似值
用 FEM :
FEM 与 FDM 的核心差异
FEM:通过能量泛函离散(基函数 + 分片积分 ),自然引入刚度矩阵 $K$ 和质量矩阵 $M$,适用于复杂几何与边界条件,精度依赖基函数(如分片线性 )
FDM:直接离散微分方程,形式简洁但对复杂域适配性差,精度依赖差分格式(如二阶中心差分 )
八、单元矩阵构造(分片线性基函数)
对 ODE 边值问题的有限元离散,在单元 $I_i = [x_{i-1}, x_i]$ 上,利用分片线性基函数,将能量泛函的积分分解为单元层次的矩阵运算:
单元刚度矩阵 $K^{(i)}$:
由导数项 $\displaystyle \int_{I_i} (u_h’)^2 dx$ 推导,通过节点值 $u_{i-1}, u_i$ 的二次型表示:
$\mathbf{U} = (u_0, \dots, u_n)^T$ 是全域节点向量,$K^{(i)}$ 是 $2 \times 2$ 单元刚度矩阵
单元质量矩阵 $M^{(i)}$:
由函数项 $\displaystyle \int_{I_i} u_h^2 dx$ 推导,同理表示为:
$M^{(i)}$ 是 $2 \times 2$ 单元质量矩阵
单元载荷向量 $b^{(i)}$:
由载荷项 $\displaystyle \int_{I_i} f u_h dx$ 推导,表示为:
九、全域矩阵组装
刚度与质量矩阵:
单元刚度矩阵 $K^{(i)}$ 和质量矩阵 $M^{(i)}$ 组装为全域矩阵 $K$($(n+1) \times (n+1)$ 稀疏矩阵,通常为三对角 )和 $M$(同理稀疏 ),满足:
总能量泛函:
全域能量泛函表示为:
$\displaystyle B = \sum_{i=1}^n b^{(i)}$ 是全域载荷向量
本质边界条件处理(Dirichlet 边界)
对边界条件 $u_0 = 0$ 或 $u_0 = \alpha$($u_0$ 是边界节点值 ),通过约束能量泛函实现:
代入边界值:
将 $u_0$ 固定为已知值(0 或 $\alpha$ ),剩余节点变量 $u_1, \dots, u_n$ 作为未知量,修改能量泛函的梯度方程(KKT 条件 ),得到降维后的线性方程组
矩阵修正:
若 $u_0 = 0$,直接从刚度矩阵 $K$、质量矩阵 $M$ 和载荷向量 $B$ 中移除对应行和列;若 $u_0 = \alpha$,则修正载荷向量 $B$(减去 $K$ 或 $M$ 中对应列与 $\alpha$ 的乘积 ),保证边界条件满足
十、有限元实现流程
实际计算中,FEM 先构造单元刚度 / 质量矩阵,再通过 “组装” 得到全域矩阵,最终求解 $(K + M)\mathbf{u} = B$ ,体现 “分而治之” 的离散思想
二、有限元 Galerkin 法
一、Galerkin 变分形式(虚功原理)
对边值问题 $-u’’ + u = f$($u(a)=0, u(b)=0$ ),虚功原理要求:
找 $u \in H_E^1$ 使 $a(u,v) = (f,v)$ 对任意 $v \in H_E^1$ 成立,其中:
二、有限元离散
有限维子空间 $U_h$:
取 $U_h \subset H_E^1$ ,由分片多项式基函数 ${ \varphi_i }$ 张成(如分片线性,$\displaystyle u_h = \sum_{i=1}^n u_i \varphi_i$ )
离散方程:
找 $u_h \in U_h$ 使 $a(u_h, v_h) = (f, v_h)$ 对任意 $v_h \in U_h$ 成立。代入基函数展开,得线性方程组:
三、单元矩阵组装
通过单元积分→全域组装构造矩阵:
设 $\displaystyle u_h=\sum_{i=0}^n u_i\varphi_i$,$\displaystyle v_h=\sum_{i=0}^n v_i\varphi_i$
同理
于是
边值条件:$u_0=\alpha$,$v_0=0$,$v_1,\cdots,v_n$ 任意