简述有限元: 逼近函数 IV上期回顾
程序
例题 1
利用拉格朗日多项式做基函数编程实现: 设函数 f(x)=10(x−1)2−1, 在线性函数空间中找到最佳逼近函数 u(x), 求解域 Ω=[1,2], 两个真解点为: x0=1+1/3,x1=1+2/3.
简述有限元: 例题 1
简述有限元: 例题 1 结果展示主程序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| f = @(x)(10*(x-1).^2 - 1);
syms x
psi = [1, x];
points = [1+1/3, 2-1/3];
[ A, b ] = interpolation( f, psi, points );
c = A\b;
u = psi*c;
% 可视化
omega = [1, 2];
X = omega(1) : 0.01 : omega(2);
U = inline(vectorize(u), 'x');
Plot(X, f, U)
% 结果展示
result(A, b, c, u)
|
例题 2
假设 f(x)=sin(2πx),Ω=[0,1], 利用拉格朗日多项式做基函数, 分别用最小二乘法和插值法寻找最佳逼近函数 u(x).
注: 可假设基函数个数为 4 个, 拉格朗日点为等距节点

结果展示
结果展示程序过长, 源代码见原文链接. 肉眼可见, 最小二乘法逼近效果更好, 但其系数矩阵更复杂一些.
小结
上次推送了重要的拉格朗日多项式作基函数, 结合上述例题, 知用于插值法中, 可使得系数矩阵 A=I 为单位矩阵, 但是, 应用到最小二乘法中, 系数矩阵却不是稀疏矩阵的, 因为
Ai,j=(ψi,ψj)=0.
简述有限元: 两个节点
简述有限元: 三个节点
简述有限元: 四个节点
因此, 本次继续讨论逼近函数问题, 考虑 ..有限元基函数.. .
有限元基函数
引子
在之前 3 期推送(逼近函数)中, 基函数 ψi(x),i∈Is 在整个区域 Ω 上一般都是非零的, 如下图所示.
u(x)=4\psi_0(x)-\frac{1}{2}\psi_1(x)而有限元法要求基函数有紧支撑, 即它们只有在一小部分区域内是非零的, 在大部分区域都是零. 另外, 一般要求基函数是分段多项式函数, 如下图所示

单元和节点
Elements and nodes
将区域 Ω 剖分为有限个互补重叠的子区域 Ω(e),e=0,…,Ne:
Ω=Ω(0)∪⋯∪Ω(Ne)称这样的子区域为单元, 每个单元有一个区分其他单元的上标 (e). 然后, 在每个单元 Ω(e) 上定义点的集合, 命名为节点. 为区分不同节点, 我们还需要一套节点的全局编号, 并且在每个小单元上定义局部编号.
有 5 个单元 6 个节点的有限元网格单元和节点完全定义了有限元网格, 即完成了对空间的离散. 上图为常见的均匀剖分网格, 即单元的规格相同, 节点间的距离也相同.
一个例子
Ω=[0,1] 内剖分为两个单元:
2 个单元 5 个节点的单位有限元网格\begin{aligned}
\Omega^{(0)}=[0, 0.4]\
\Omega^{(1)}=[0.4, 1]
\end{aligned}
每个单元内有 3 个节点. 则有全局编号
因此, 节点信息用向量表示
1
| nodes = [0, 0.2, 0.4, 0.7, 1];
|
每个单元由三个节点组成
| 局部编号 | 0 | 1 | 2 |
|---|
| Ω(0) | 0 | 1 | 2 |
| Ω(1) | 2 | 3 | 4 |
因此, 单元信息用矩阵信息
1
2
| elements= [0, 1, 2;
2, 3, 4];
|
基函数
有限元基函数用 φi(x) 表示, 索引 i 为节点的全局编码, 即基函数的个数等于节点的个数. 在逼近函数问题时, 我们另 ψi(x)=φi(x).
构造原理
为方便, 在单元 e 中, 令 i 为全局编号, r 为局部编号, 有限元基函数构造遵循以下规则:
- r 为单元 e 内部编号:
选取 φi 在 单元 e 内 r 处为 1, 其他节点为 0; 在其他单元上 φi(x)≡0. - r 为单元 e 边界编号:
选取 φi 在单元 e 和单元 e+1 上不恒为 0 (φi≡0), 具体的, 在 r 处等于 1, 其他节点处等于 0. 而在其他单元上, φi(x)≡0.
下图展示对这两条规则直观的理解
$\Omega^{(1)}$ 内的三个基函数φi 的性质
φi(xj)=δijδij=⎩⎨⎧1,0,i=ji=j从而
u(xi)=j∈Is∑cjψj(xi)=j∈Is∑cjφj(xi)=ciφi(xi)=ci即..系数..ci 的值等于 u 在 i 处的函数值(数值解).
因此, A∗ij=∫∗Ω(e)φ_i(x)φj(x)dx 在系数矩阵中大多等于 0.
假设每个单元有 d+1 个节点, 那么局部拉格朗日多项式的次数是 d.
分段线性有限元基函数
φi(x)=⎩⎨⎧0,(x−xi−1)/h,1−(x−xi−1)/h,0,x<xi−1xi−1≤x<xixi≤x<xi+1x≥xi+1
P1 元分段二次有限元基函数
P2 元在每一个单元上, 都是拉格朗日多项式作基函数
建立线性方程组
组装系数矩阵
[Ai,j]=(φj(x),φi(x)).
系数矩阵由基函数的性质, 可知只有 Ai,i 或者 Ai,i−1=Ai.i+1 不为 0, 即 A 为三对角阵.
当 0<i<N
Ai,i=∫Ωφi2dx=∫i−1iφi2dx+∫ii−1φi2dx=∫i−1i(hx−xi−1)2dx+∫ii−1(1−hx−xi)2dx=32h.以及 0<i≤N
有限元公式Ai,i+1=Ai,i−1.最后显然,
A0,0=∫Ωφ02dx=∫x0x1(1−hx−x0)2dx=3h.AN,N=A0,0.
载入右端项
bi=∫Ωφi(x)f(x)dx=∫xi−1xihx−xi−1f(x)dx+∫xixi+1(1−hx−xi)f(x)dx
右端项例题
将 Ω=[0,1] 划分为两个相同的的子区域, 设 f(x)=x(1−x), 利用一阶有限元基函数(P1)计算最佳逼近 u(x).
利用上述公式, 得到
A=6h210141012,b=12h22−3h12−14h10−17h.进而得到
c0=6h2,c1=h−65h2,c2=2h−623h2.所以,
u(x)=c0φ0(x)+c1φ1(x)+c2φ2(x).利用计算机绘图得到
左: 2 个节点 右: 4 个节点小结
有限元基函数可以保证最小二乘法的系数矩阵是稀疏的, 而且基函数是简单的多项式.
帽子函数
下节预告
有限元计算在实际中不可能是手算的, 所以下次介绍一下编程技巧.