2021-5-18 有限元方法从0开始学习笔记 第二天 (一维线性元简介, 与差分格式的联系)

又是新的一天, 继续开始有限元从0开始学习, 参考资料
Brenner S, Scott R. The mathematical theory of finite element methods[M]. Springer Science & Business Media, 2007.

昨天内容回顾

2021-5-17 有限元方法从0开始学习笔记 第一天

  • 利用模型问题, 构造了其变分形式, 并且验证了当 f f f u u u 的光滑性足够时, 变分问题能够得到边值问题对古典解.
  • 阐述了 Ritz-Galerkin 框架的逼近过程, 并给出了简单的离散系统的解的存在唯一性的证明.(到后面可以直接使用 Lax-Milgram 定理).
  • 给出了一维模型问题 Ritz-Galerkin 框架下的能量误差以及 L 2 L^{2} L2 范数误差估计的示范.

下面开始今天内容的学习.

0.4 分片多项式空间-有限元方法

前面介绍 Ritz-Galerkin 框架时, 没有给出子空间 S S S 的具体形式, 实际上对于选取不同的子空间, 可以给出不同的方法(谱方法, 有限元方法) 等, 这里主要考虑有限元方法, 在本章会给出第一个有限元基函数空间, 并且定义简单的插值算子, 以及给出插值误差估计.
继续考虑模型问题
{ − d 2 u d x 2 = f ∈ ( 0 , 1 ) , u ( 0 ) = 0 ,   u ′ ( 1 ) = 0. . \begin{cases} -\dfrac{d^{2}u}{dx^{2}} = f \in (0, 1), \\ u(0) = 0, \ u^{'}(1) = 0. \end{cases}. dx2d2u=f(0,1),u(0)=0, u(1)=0..
对应的弱形式
find  u ∈ V   s . t . ,   a ( u , v ) = ( f , v )   ∀ v ∈ V .   ( WP ) \text{find} \ u \in V \ s.t., \ a(u, v) = (f, v) \ \forall v \in V. \ \color{red}{(\text{WP}}) find uV s.t., a(u,v)=(f,v) vV. (WP)
以及 Ritz-Galerkin 方法的离散问题
find  u s ∈ S ⊂ V   s . t . ,   a ( u s , v ) = ( f , v )   ∀ v ∈ S ⊂ V .   ( R-G ) \text{find} \ u_{s} \in S \subset V \ s.t., \ a(u_{s}, v) = (f, v) \ \forall v \in S \subset V. \ \color{red}{(\text{R-G}}) find usSV s.t., a(us,v)=(f,v) vSV. (R-G)
其中, 空间 V V V 定义如下:
V = H ⋄ 1 ( 0 , 1 ) = { u ∈ H 1 ( 0 , 1 ) ∣ u ( 0 ) = 0 } . V = H^{1}_{\diamond}(0, 1) = \left\lbrace \left. u \in H^{1}(0, 1) \right| u(0) = 0 \right\rbrace. V=H1(0,1)={uH1(0,1)u(0)=0}.
前面只是抽像地给出了问题在子空间 S S S 下的计算, 下面定义第一个有限元空间:
0 = x 0 < x 1 < ⋯ < x n = 1 0 = x_{0} < x_{1} < \cdots < x_{n} = 1 0=x0<x1<<xn=1 为区间 [ 0 , 1 ] [0, 1] [0,1] 上的剖分, 定义空间 S S S 为满足如下条件的函数 v v v 构成的线性空间:

  • v ∈ C 0 [ 0 , 1 ] v \in C^{0}[0, 1] vC0[0,1],
  • v ∣ [ x i − 1 , x i ] \left. v \right|_{[x_{i-1}, x_{i}]} v[xi1,xi] 为线性多项式,
  • v ( 0 ) = 0 v(0) = 0 v(0)=0

下面自然的会有两个问题

  • 上面定义的 S S S 是不是 V V V 的子空间,
  • 如何找出 S S S 的基函数, 应该取什么样的基函数,

这里先回答第二个问题, 对于第一个问题留在后面回答.
定义 S S S 的基函列 { ϕ i } i = 1 n \left\lbrace \phi_{i} \right\rbrace_{i = 1}^{n} {ϕi}i=1n, 满足 ϕ i ( x j ) = δ i j \phi_{i}(x_{j}) = \delta_{ij} ϕi(xj)=δij , 这个性质称为插值性质.
引理: 满足上面条件的函数序列存在唯一, 并且构成子空间 S S S 的基.
注1 称上面的 { ϕ i } \left\lbrace \phi_{i} \right\rbrace {ϕi} 为空间 S S S 的节点基函数, 称 { v ( x i ) } \left\lbrace v(x_{i}) \right\rbrace {v(xi)} 为函数 v v v 在节点处的值.
定义 v ∈ C 0 ( [ 0 , 1 ] ) v \in C^{0}([0, 1]) vC0([0,1]), 定义插值算子 I : C 0 ( [ 0 , 1 ] ) → S I: C^{0}([0, 1]) \to S I:C0([0,1])S
v I ( x ) : = I v ( x ) = ∑ i = 1 n v ( x i ) ϕ ( x ) . v_{I}(x):= Iv(x) = \sum\limits_{i = 1}^{n} v(x_{i})\phi(x). vI(x):=Iv(x)=i=1nv(xi)ϕ(x).
由上面插值算子的定义, 可以知道, 显然 ϕ i \phi_{i} ϕi 可以张成整个空间 S S S, 根据基函数的插值性质, 容易验证 { ϕ i } i = 1 n \left\lbrace \phi_{i} \right\rbrace_{i=1}^{n} {ϕi}i=1n 是线性无关的.
引理: v ∈ S v \in S vS, 则 v I = v v_{I} = v vI=v.
证明, 只要验证 ∀ x ∈ [ 0 , 1 ] ,    v I ( x ) = v ( x ) \forall x \in [0, 1], \ \ v_{I}(x) = v(x) x[0,1],  vI(x)=v(x) 即可.显然, 有
v I ( x i − 1 ) − v ( x i − 1 ) = 0 v I ( x i ) − v ( x i ) = 0 v_{I}(x_{i-1}) - v(x_{i-1}) = 0 \\ v_{I}(x_{i}) - v(x_{i}) = 0 vI(xi1)v(xi1)=0vI(xi)v(xi)=0
注意到 v I ( x ) , v ( x ) v_{I}(x), v(x) vI(x),v(x) 限制在每个区间上都是分片多项式. 因此 v I ( x ) = v ( x )  in  [ x i − 1 , x i ]   ∀   i v_{I}(x) = v(x) \ \text{in} \ [x_{i-1}, x_{i}] \ \forall \ i vI(x)=v(x) in [xi1,xi]  i, 从而 v I ( x ) = v ( x ) v_{I}(x) = v(x) vI(x)=v(x),
下面给出插值误差在能量范数下的误差估计.
定理: h = max ⁡ 1 ≤ i ≤ n ( x i − x i − 1 ) h = \max_{1 \leq i \leq n} \left( x_{i} - x_{i-1}\right) h=max1in(xixi1) ,则有如下能量范数估计:
∥ u − u I ∥ E ≤ C h ∥ u ′ ′ ∥ \|u - u_{I}\|_{E} \leq Ch \| u^{''} \| uuIEChu
∀ u ∈ V \forall u \in V uV, 并且常数 C C C 不依赖于网格大小 h h h 以及 u u u.

证明, 利用 scaling 技巧, 只要想办法证明上面的估计分片成立即可, 即想办法做出如下估计:
∫ x j − 1 x j ( ( u − u I ) ′ ( x ) ) 2 d x ≤ c ( x j − x j − 1 ) 2 ∫ x j − 1 x j u ′ ′ ( x ) 2 d x \int_{x_{j-1}}^{x_{j}} \left( (u - u_{I})'(x) \right)^{2} dx \leq c\left(x_{j} - x_{j-1}\right)^{2} \int_{x_{j-1}}^{x_{j}} u^{''}(x)^{2} dx xj1xj((uuI)(x))2dxc(xjxj1)2xj1xju(x)2dx
记误差函数 e ( x ) = ( u − u I ) ( x ) e(x) =(u - u_{I})(x) e(x)=(uuI)(x), 注意 u I ( x ) u_{I}(x) uI(x) 是分片线性多项式, 从而上述估计等价于证明:
∫ x j − 1 x j e ′ ( x ) 2 d x ≤ c ( x j − x j − 1 ) 2 ∫ x j − 1 x j e ′ ′ ( x ) 2 d x \int_{x_{j-1}}^{x_{j}} e^{'}(x) ^{2} dx \leq c\left( x_{j} - x_{j-1} \right)^{2} \int_{x_{j-1}}^{x_{j}} e^{''}(x)^{2} dx xj1xje(x)2dxc(xjxj1)2xj1xje(x)2dx
为了使得估计不依赖于网格, 利用 scaling 技术, 将上述估计用仿射变换变换到参考单元上, 记
x ^ = x − x j − 1 x j − x j − 1 \widehat{x} = \dfrac{x - x_{j-1}}{x_{j} - x_{j-1}} x =xjxj1xxj1
再有
x = x j − 1 + x ^ ( x j − x j − 1 ) d x = ( x j − x j − 1 ) d x ^ e ^ ( x ^ ) = e ( x j − 1 + x ^ ( x j − x j − 1 ) ) = e ( x ) d e ^ ( x ^ ) d x ^ = d e ( x ) d x d x d x ^ = ( x j − x j − 1 ) d e ( x ) d x d e ^ ′ ( x ^ ) d x ^ = d e ^ ′ ( x ^ ) d x d x d x ^ = ( x j − x j − 1 ) 2 d e ′ ( x ) d x \begin{aligned} &x = x_{j-1} + \widehat{x}(x_{j} - x_{j-1}) \\ &dx = \left(x_{j} - x_{j-1}\right) d\widehat{x} \\ & \widehat{e}(\widehat{x}) = e( x_{j-1} + \widehat{x}(x_{j} - x_{j-1}) ) = e(x) \\ & \dfrac{d \widehat{e} (\widehat{x}) }{ d \widehat{x} } = \dfrac{d e(x)}{d x} \dfrac{dx}{d \widehat{x}} = (x_{j} - x_{j-1}) \dfrac{d e(x)}{dx} \\ & \dfrac{d \widehat{e}^{'}(\widehat{x}) }{ d \widehat{x} } = \dfrac{d \widehat{e}^{'}(\widehat{x}) }{ d x } \dfrac{dx}{d\widehat{x}} = (x_{j} - x_{j-1})^{2}\dfrac{de^{'}(x)}{dx} \end{aligned} x=xj1+x (xjxj1)dx=(xjxj1)dx e (x )=e(xj1+x (xjxj1))=e(x)dx de (x )=dxde(x)dx dx=(xjxj1)dxde(x)dx de (x )=dxde (x )dx dx=(xjxj1)2dxde(x)
代入上式, 从而只要在参考单元上证明:
∫ 0 1 e ^ ′ ( x ^ ) 2 d x ^ ≤ c ∫ 0 1 e ^ ′ ′ ( x ^ ) 2 d x ^ \int_{0}^{1} \widehat{e}^{'}(\widehat{x}) ^{2} d\widehat{x} \leq c \int_{0}^{1} \widehat{e}^{''}(\widehat{x})^{2} d\widehat{x} 01e (x )2dx c01e (x )2dx
下面只要证明这一点即可, 为了简化记号, 记 w ( x ) = e ^ ( x ^ ) w(x) = \widehat{e}(\widehat{x}) w(x)=e (x ), 下面证明
∫ 0 1 w ′ ( x ) 2 d x ≤ c ∫ 0 1 w ′ ′ ( x ) 2 d x \int_{0}^{1} w^{'}(x)^{2} dx \leq c\int_{0}^{1} w^{''}(x)^{2} dx 01w(x)2dxc01w(x)2dx
左边是一阶导数, 右边是二阶导数, 显然应该利用 Newton-Leibniz 公式建立两边的联系, 注意到 w ( x ) w(x) w(x) 在端点上为 0, 利用 Rolle 定理可知, 存在 ξ ∈ ( 0 , 1 ) ,   s . t . ,   w ′ ( ξ ) = 0 \xi \in (0,1), \ s.t., \ w^{'}(\xi) = 0 ξ(0,1), s.t., w(ξ)=0, 从而有
∣ w ′ ( y ) ∣ = ∣ w ′ ( y ) − w ′ ( ξ ) ∣ = ∣ ∫ ξ y w ′ ′ ( x ) d x ∣ ≤ ∣ ∫ ξ y 1 2 d x ∣ 1 / 2 ∣ ∫ ξ y w ′ ′ ( x ) 2 d x ∣ 1 / 2 = ∣ y − ξ ∣ 1 / 2 ( ∫ 0 1 w ′ ′ ( x ) 2 d x ) 1 / 2 \begin{aligned} |w^{'}(y)| &= \left| w^{'}(y) - w^{'}(\xi) \right| = \left| \int_{\xi}^{y} w^{''}(x) dx \right| \\ & \leq \left| \int_{\xi}^{y} 1^{2} dx \right|^{1/2} \left| \int_{\xi}^{y} w^{''}(x)^{2} dx \right|^{1/2} \\ & = |y - \xi|^{1/2} \left( \int_{0}^{1} w^{''}(x)^{2} dx \right)^{1/2} \end{aligned} w(y)=w(y)w(ξ)=ξyw(x)dxξy12dx1/2ξyw(x)2dx1/2=yξ1/2(01w(x)2dx)1/2
从而有:
∫ 0 1 w ′ ( y ) 2 d y ≤ ∫ 0 1 ∣ y − ξ ∣ d y ∫ 0 1 w ′ ′ ( x ) 2 d x ≤ c ∫ 0 1 w ′ ′ ( x ) 2 d x \begin{aligned} \int_{0}^{1} w^{'}(y)^{2} dy &\leq \int_{0}^{1} \left| y - \xi \right|dy \int_{0}^{1} w^{''}(x)^{2} dx \\ &\leq c \int_{0}^{1} w^{''}(x)^{2} dx \end{aligned} 01w(y)2dy01yξdy01w(x)2dxc01w(x)2dx
其中
c = sup ⁡ 0 < ξ < 1 ∫ 0 1 ∣ y − ξ ∣ d y = 1 2 c = \sup\limits_{0 < \xi < 1} \int_{0}^{1} | y - \xi | dy = \frac{1}{2} c=0<ξ<1sup01yξdy=21
从而证明了
∫ x j − 1 x j e ′ ( x ) 2 d x ≤ c ( x j − x j − 1 ) 2 ∫ x j − 1 x j e ′ ′ ( x ) 2 d x \int_{x_{j-1}}^{x_{j}} e^{'}(x) ^{2} dx \leq c\left( x_{j} - x_{j-1} \right)^{2} \int_{x_{j-1}}^{x_{j}} e^{''}(x)^{2} dx xj1xje(x)2dxc(xjxj1)2xj1xje(x)2dx
上式两边对 j j j 从 0 到 n 进行求和:
∫ 0 1 e ′ ( x ) 2 d x ≤ c h 2 ∫ 0 1 e ′ ′ ( x ) 2 d x \int_{0}^{1} e^{'}(x) ^{2} dx \leq ch^{2} \int_{0}^{1} e^{''}(x)^{2} dx 01e(x)2dxch201e(x)2dx
从而有
∥ u − u I ∥ E ≤ C h ∥ u ′ ′ ∥ \|u - u_{I}\|_{E} \leq Ch \| u^{''} \| uuIEChu
推论: ∥ u − u S ∥ + C h ∥ u − u S ∥ E ≤ 2 ( C h ) 2 ∥ u ′ ′ ∥ \| u - u_{S} \| + Ch \| u - u_{S} \|_{E} \leq 2(Ch)^{2} \|u^{''}\| uuS+ChuuSE2(Ch)2u.
根据前面对 Ritz-Galerkin 框架的误差估计, 马上可以得到.
在后面的内容, 仍然会继续考虑类似的误差估计, 到时候就是高维情形, 高维情形会和一维情形在细节上会有比较大的差距,但是就整体思路而言, 我认为基本上是一样的.

0.5 和差分方法的关系

下面计算出由上面基函数所定义的线性系统的刚度矩阵, 由 K i j = a ( ϕ j , ϕ i ) \mathbf{K}_{ij} = a(\phi_{j}, \phi_{i}) Kij=a(ϕj,ϕi), 注意这里的双线性型是对称的, 这将直接导致刚度矩阵也是对称的, 对 1 ≤ i ≤ n − 1 1 \leq i \leq n-1 1in1:
K i , i = ∫ x i − 1 x i ϕ i ′ ( x ) ϕ i ′ ( x ) + ∫ x i x i + 1 ϕ i + 1 ′ ( x ) ϕ i + 1 ′ ( x ) = 1 h i + 1 h i + 1 K i , i + 1 = K i + 1 , i = a ( ϕ i , ϕ i + 1 ) = ∫ x i x i + 1 ϕ i ′ ( x ) ϕ i + 1 ′ ( x ) = − 1 h i + 1 \begin{aligned} &K_{i,i} = \int_{x_{i-1}}^{x_{i}} \phi^{'}_{i}(x)\phi^{'}_{i}(x) + \int_{x_{i}}^{x_{i+1}} \phi^{'}_{i+1}(x)\phi^{'}_{i+1}(x) = \dfrac{1}{h_{i}} + \dfrac{1}{h_{i+1}} \\ &K_{i,i+1} = K_{i+1, i} = a(\phi_{i}, \phi_{i+1}) = \int_{x_{i}}^{x_{i+1}} \phi^{'}_{i}(x)\phi^{'}_{i+1}(x) = -\dfrac{1}{h_{i+1}} \end{aligned} Ki,i=xi1xiϕi(x)ϕi(x)+xixi+1ϕi+1(x)ϕi+1(x)=hi1+hi+11Ki,i+1=Ki+1,i=a(ϕi,ϕi+1)=xixi+1ϕi(x)ϕi+1(x)=hi+11

此外, K n n = 1 h n K_{nn} = \dfrac{1}{h_{n}} Knn=hn1不难知道, 对于其它位置, 刚度矩阵都是 0.
对右端项用如下逼近(将 f ( x ) f(x) f(x) x i x_{i} xi 处进行 Taylor 展开, 之后对基函数直接积分):
∫ 0 1 f ( x ) ϕ i ( x ) d x = ∫ x i − 1 x i f ( x ) ϕ i ( x ) d x + ∫ x i x i + 1 f ( x ) ϕ i ( x ) d x = ( f ( x i ) + O ( h ) ) ( ∫ x i − 1 x i ϕ i ( x ) d x + ∫ x i x i + 1 ϕ i ( x ) d x ) = ( f ( x i ) + O ( h ) ) ( ∫ x i − 1 x i 1 h i ( x − x i − 1 ) d x + ∫ x i x i + 1 − 1 h i + 1 ( x − x i + 1 ) d x ) = 1 2 ( h i + h i + 1 ) ( f ( x i ) + O ( h ) ) . \begin{aligned} \int_{0}^{1} f(x)\phi_{i}(x) dx &= \int_{x_{i-1}}^{x_{i}}f(x)\phi_{i}(x) dx + \int_{x_{i}}^{x_{i+1}} f(x) \phi_{i}(x) dx \\ &= (f(x_{i}) + O(h)) \left( \int_{x_{i-1}}^{x_{i}} \phi_{i}(x) dx + \int_{x_{i}}^{x_{i+1}} \phi_{i}(x)dx \right) \\ &= (f(x_{i}) + O(h))\left( \int_{x_{i-1}}^{x_{i}} \dfrac{1}{h_{i}}(x - x_{i-1})dx + \int_{x_{i}}^{x_{i+1}}\dfrac{-1}{h_{i+1}}(x - x_{i+1}) dx \right) \\ &= \dfrac{1}{2}(h_{i} + h_{i+1})(f(x_{i}) + O(h)). \end{aligned} 01f(x)ϕi(x)dx=xi1xif(x)ϕi(x)dx+xixi+1f(x)ϕi(x)dx=(f(xi)+O(h))(xi1xiϕi(x)dx+xixi+1ϕi(x)dx)=(f(xi)+O(h))(xi1xihi1(xxi1)dx+xixi+1hi+11(xxi+1)dx)=21(hi+hi+1)(f(xi)+O(h)).
其中 h = max ⁡ { h i , h i + 1 } h = \max\{h_{i}, h_{i+1}\} h=max{hi,hi+1}, 利用 Taylor 展开马上就可以验证, 如果想要让逼近精度达到二阶, 则网格步长需要满足条件, 即 1 − ( h i / h i + 1 ) = O ( h ) 1 - (h_{i}/h_{i+1}) = O(h) 1(hi/hi+1)=O(h). 考虑方程组 K U = F \mathbf{K}\mathbf{U} = \mathbf{F} KU=F 的第 i i i 个分量方程
K i , i − 1 U i − 1 + K i , i U i + K i , i + 1 U i + 1 = ( f , ϕ i ) K_{i,i-1}U_{i-1} + K_{i,i}U_{i} + K_{i, i+1}U_{i+1} = \left( f, \phi_{i}\right) Ki,i1Ui1+Ki,iUi+Ki,i+1Ui+1=(f,ϕi)
代入前面的计算:
− 1 h i U i − 1 + ( 1 h i + 1 h i + 1 ) U i − 1 h i + 1 U i + 1 = 1 2 ( h i + h i + 1 ) ( f ( x i ) + O ( h ) ) -\dfrac{1}{h_{i}}U_{i-1} + \left( \dfrac{1}{h_{i}} + \dfrac{1}{h_{i+1}} \right) U_{i} - \dfrac{1}{h_{i+1}}U_{i+1} = \dfrac{1}{2}(h_{i} + h_{i+1})(f(x_{i}) + O(h)) hi1Ui1+(hi1+hi+11)Uihi+11Ui+1=21(hi+hi+1)(f(xi)+O(h))
整理为如下形式得:
− 2 h i + h i + 1 [ U i + 1 − U i h i + 1 − U i − U i − 1 h i ] = f ( x i ) + O ( h ) \dfrac{-2}{h_{i} + h_{i+1}}\left[ \dfrac{U_{i+1} - U_{i}}{h_{i+1}} - \dfrac{U_{i} - U_{i-1}}{h_{i}} \right] = f(x_{i}) + O(h) hi+hi+12[hi+1Ui+1UihiUiUi1]=f(xi)+O(h)
注意, 当网格取一直剖分的时候, 上述格式退化为中心差分格式, 并且由上面条件可知, 截断误差变为 O ( h 2 ) O(h^{2}) O(h2), 即:
− U i + 1 − 2 U i + U i − 1 h 2 = f ( x i ) + O ( h 2 ) . -\dfrac{U_{i+1} - 2U_{i} + U_{i-1}}{h^{2}} = f(x_{i}) + O(h^{2}). h2Ui+12Ui+Ui1=f(xi)+O(h2).
关于其它注解, 可以看参考资料 第十页.
今天就到这里啦, 明天有课, 可能会停一天,或者少打一点 后面希望继续坚持.

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值