0
点赞
收藏
分享

微信扫一扫

DG方法:一维ODE

言诗把酒 2022-02-28 阅读 44

DG方法:一维ODE

考虑一维ODE的边值问题:
{ u x = f ( x ) u ( 0 ) = a   ,   x ∈ [ 0 , 1 ] \left\{\begin{matrix}u_x=f(x)\\ u(0)=a\end{matrix}\right. \space,\space x\in [0,1] {ux=f(x)u(0)=a , x[0,1]

有限差分方法

x ∈ [ 0 , 1 ] x\in[0,1] x[0,1]做uniform划分: x j = j Δ x = j 1 N x_j=j\Delta x=j \frac{1}{N} xj=jΔx=jN1

如果是一阶FD:对于第 j j j个网格点,需要利用 u j − 1 , u j , u j + 1 u_{j-1}, u_j, u_{j+1} uj1,uj,uj+1等信息逼近 u x u_x ux,其中 u j u_j uj表示准确解 u ( x j ) u(x_j) u(xj)的近似,则

u x ∣ x j ≈ u j − u j − 1 Δ x u_x|_{x_j} \approx\frac{u_j-u_{j-1}}{\Delta x} uxxjΔxujuj1

要选择用 x j − 1 x_{j-1} xj1是因为边界条件定义在左侧,信息从迎风的左边来。代入原式有

u j − u j − 1 Δ x = f ( x j ) ⇒ u j = u j − 1 + Δ x f ( x j ) \frac{u_j-u_{j-1}}{\Delta x}=f(x_j) \Rightarrow u_j=u_{j-1}+\Delta x f(x_j) Δxujuj1=f(xj)uj=uj1+Δxf(xj)

所以求解过程可以从左向右扫描(sweep,最左边是 u 0 = a u_0=a u0=a),非常易于计算。

但只有一阶精度:

∣ u ( x j ) − u j ∣ ≈ O ( Δ x ) |u(x_j)-u_j|\approx O(\Delta x) u(xj)ujO(Δx)

当从 N N N个网格点加密到 2 N 2N 2N时,工作量增加一倍,但误差仅能减少一半。

而如果使用更高阶精度的差分方法,同理,将 u x ( x j ) u_x(x_j) ux(xj)表示为 u j − 2 , u j − 1 , u j u_{j-2}, u_{j-1}, u_{j} uj2,uj1,uj的线性组合(可通过Taylor展开推导)。这对于 j = 2 , 3 , . . . , N j=2,3,...,N j=2,3,...,N是可行的,但 j = 1 j=1 j=1处显然没有这么多stencil可供构造,所以在边界上使用一阶格式,但这又会导致计算降阶!因为 u 1 u_1 u1只有一阶精度,那么根据 u 1 u_1 u1计算出的 u 2 u_2 u2也达不到二阶,如此类推。

Discrete Galerkin

格式导出

DG希望既易于计算,又能有高阶精度。它首先定义一系列半网格点 x 2 k + 1 2 ( k = 0 , 1 , . . . , N ) x_{\frac{2k+1}{2}}(k=0,1,...,N) x22k+1(k=0,1,...,N),将区间划分为很多个单元,单元 I j = [ x j − 1 2 , x j + 1 2 ] I_j=[x_{j-\frac{1}{2}}, x_{j+\frac{1}{2}}] Ij=[xj21,xj+21]。注意仅要求 0 = x 1 2 < x 3 2 < . . . < x N − 1 2 < x N + 1 2 = 1 0=x_{\frac{1}{2}}<x_{\frac{3}{2}}<...<x_{N-\frac{1}{2}}<x_{N+\frac{1}{2}}=1 0=x21<x23<...<xN21<xN+21=1,而不需要每个单元都是均匀长度的。每个单元的中点 x j = 1 2 ( x j − 1 2 + x j + 1 2 ) x_j=\frac{1}{2}(x_{j-\frac{1}{2}}+x_{j+\frac{1}{2}}) xj=21(xj21+xj+21),长度 Δ x j = x j − 1 2 − x j + 1 2 \Delta x_j=x_{j-\frac{1}{2}}-x_{j+\frac{1}{2}} Δxj=xj21xj+21。记 h = max ⁡ j Δ x j h=\underset{j}{\max} \Delta x_j h=jmaxΔxj

定义解空间(solution space):
V h k : = { v : v ∣ I j ∈ P k ( I j ) , j = 1 , 2 , . . . , N } \bm{V}_h^k:=\{v: v|_{I_j} \in \bm{P}^k(I_j),j=1,2,...,N\} Vhk:={v:vIjPk(Ij),j=1,2,...,N}

其中 P k ( I j ) \bm{P}^k(I_j) Pk(Ij)表示第 j j j个单元上的次数小于等于 k k k的多项式空间。当 k = 1 k=1 k=1时即为分片线性函数(piecewise linear functions)。注意在cell边界处,函数值时可以间断的,而区别于传统有限元要求内部单元的边界值连续。

由于解在单元边界处可以完全不连续,因此 x j + 1 2 x_{j+\frac{1}{2}} xj+21处存在一个左值 u j + 1 2 − u_{j+\frac{1}{2}}^- uj+21和一个右值 u j + 1 2 + u_{j+\frac{1}{2}}^+ uj+21+,分别属于左右两个单元。

不同单元的多项式空间 P k \bm{P}^k Pk的阶数 k k k可以不同( P \bm{P} P adaptivity)。

定义测试函数(test function) v ( x ) v(x) v(x),原问题成立,则如下积分式一定成立:

∫ I j u x v = ∫ I j f ( x ) v   ,   j = 1 , 2 , . . . , N \int _{I_j} u_xv =\int_{I_j}f(x)v \space, \space j=1,2,...,N Ijuxv=Ijf(x)v , j=1,2,...,N

假定 v ( x ) v(x) v(x)是至少可微的,那么分部积分:

∫ I j f ( x ) v = ∫ I j u x v = − ∫ I j u v x + u ( x j + 1 2 ) v ( x j + 1 2 ) − u ( x j − 1 2 ) v ( x j − 1 2 ) \int_{I_j}f(x)v=\int _{I_j} u_xv =-\int _{I_j} uv_x + u(x_{j+\frac{1}{2}})v(x_{j+\frac{1}{2}}) - u(x_{j-\frac{1}{2}})v(x_{j-\frac{1}{2}}) Ijf(x)v=Ijuxv=Ijuvx+u(xj+21)v(xj+21)u(xj21)v(xj21)

所以问题转换为:

find u h ( x ) ∈ V h k u_h(x) \in \bm{V}_h^k uh(x)Vhk来逼近 u ( x ) u(x) u(x),代入上式有

− ∫ I j u v x + ( u h v ) ∣ x j + 1 2 − ( u h v ) ∣ x j − 1 2 = ∫ I j f ( x ) v -\int _{I_j} uv_x +(u_hv)|_{x_{j+\frac{1}{2}}} - (u_hv)|_{x_{j-\frac{1}{2}}}=\int_{I_j}f(x)v Ijuvx+(uhv)xj+21(uhv)xj21=Ijf(x)v

但问题是 v ∈ v\in v?,如果任意的可微函数都可以,那么自由度太多会造成over-determined!注意到

u h k ∈ V h k : = { v : v ∣ I j ∈ P k ( I j ) , j = 1 , 2 , . . . , N } u_h^k \in \bm{V}_h^k:=\{v: v|_{I_j} \in \bm{P}^k(I_j),j=1,2,...,N\} uhkVhk:={v:vIjPk(Ij),j=1,2,...,N}

在每个单元 I j I_j Ij上确定 P k ( I j ) \bm{P}^k(I_j) Pk(Ij)需要 k + 1 k+1 k+1个参数,将 P k ( I j ) \bm{P}^k(I_j) Pk(Ij)这个线性空间的基取为 φ j 0 ( x ) , φ j 1 ( x ) , . . . , φ j k ( x ) \varphi_j^0(x),\varphi_j^1(x),...,\varphi_j^k(x) φj0(x),φj1(x),...,φjk(x),则线性表出为

u h ( x ) ∣ I j = ∑ l = 0 k u j l φ j l ( x ) u_h(x)|_{I_j}=\sum_{l=0}^k u_j^l\varphi_j^l(x) uh(x)Ij=l=0kujlφjl(x)

因为共有 N N N个单元,则 dim ⁡ V h k = N ( k + 1 ) \dim V_h^k=N(k+1) dimVhk=N(k+1)需要求解的值是线性组合的系数 u j l   ,   l = 0 , 1 , . . . , k ,   j = 1 , 2 , . . . , N u_j^l\space,\space l=0,1,...,k,\space j=1,2,...,N ujl , l=0,1,...,k, j=1,2,...,N,因此需要有 N ( k + 1 ) N(k+1) N(k+1)个约束条件。假定 v ∈ W h v\in \bm{W}_h vWh,那么应该要有 dim ⁡ W h = dim ⁡ V h k = N ( k + 1 ) \dim \bm{W}_h=\dim \bm{V}_h^k=N(k+1) dimWh=dimVhk=N(k+1)

这两者是可以取成不一样的线性空间的,而如果取成一样的( W h = V h k \bm{W}_h=\bm{V}_h^k Wh=Vhk,都来自分片线性多项式的空间),则成为Galerkin方法

于是问题转换为:find u h ∈ V h k   ,   v ∈ V h k u_h \in \bm{V}_h^k\space, \space v \in \bm{V}_h^k uhVhk , vVhk ……

但仍不对,因为单元边界上有两个值(左值 u j + 1 2 − u_{j+\frac{1}{2}}^- uj+21和右值 u j + 1 2 + u_{j+\frac{1}{2}}^+ uj+21+)。需要额外加条件。而我们希望当 k = 0 k=0 k=0时,DG方法能还原回普通的一阶(迎风)有限差分方法: u j − u j − 1 Δ x = f ( x j ) \frac{u_j - u_{j-1}}{\Delta x} = f(x_j) Δxujuj1=f(xj)

此时解空间和测试函数空间都为分片常值函数。由于测试函数是任意的,取 v = { 1   ,     I j 0 ,   o t h e r v=\left\{\begin{matrix}1\space,\space \space \space I_j\\ 0, \space\rm{other} \end{matrix}\right. v={1 ,   Ij0, other,则 v x = 0 v_x=0 vx=0 ∫ I j u h v x = 0 \int_{I_j}u_hv_x=0 Ijuhvx=0。于是有

u h ( x j + 1 2 ) v ( x j + 1 2 ) − u h ( x j − 1 2 ) v ( x j − 1 2 ) = ∫ I j f ( x ) u_h(x_{j+\frac{1}{2}})v(x_{j+\frac{1}{2}})-u_h(x_{j-\frac{1}{2}})v(x_{j-\frac{1}{2}})=\int_{I_j}f(x) uh(xj+21)v(xj+21)uh(xj21)v(xj21)=Ijf(x)

希望能还原出: u j − u j − 1 = Δ x f ( x j ) u_j-u_{j-1}=\Delta x f(x_j) ujuj1=Δxf(xj)。而在 k = 0 k=0 k=0时, u j u_j uj就是第 j j j个单元的函数近似解的值 u h ( I j ) u_h(I_j) uh(Ij)

注意到 v ( x ) v(x) v(x)的取值方式,因此取 v ( x j + 1 2 ) = v ( x j + 1 2 − ) , u h ( x j + 1 2 ) = u h ( x j + 1 2 − ) = u j v(x_{j+\frac{1}{2}})=v(x_{j+\frac{1}{2}}^-), u_h(x_{j+\frac{1}{2}})=u_h(x_{j+\frac{1}{2}}^-)=u_j v(xj+21)=v(xj+21),uh(xj+21)=uh(xj+21)=uj,和 v ( x j − 1 2 ) = v ( x j − 1 2 + ) , u h ( x j − 1 2 ) = u h ( x j − 1 2 − ) = u j − 1 v(x_{j-\frac{1}{2}})=v(x_{j-\frac{1}{2}}^+), u_h(x_{j-\frac{1}{2}})=u_h(x_{j-\frac{1}{2}}^-)=u_{j-1} v(xj21)=v(xj21+),uh(xj21)=uh(xj21)=uj1

所以完整的DG格式为:

find u h ( x ) ∈ V h k u_h(x) \in \bm{V}_h^k uh(x)Vhk,使得对于任意的测试函数 v ∈ V h k v\in\bm{V}_h^k vVhk和任意的单元 I j I_j Ij,都有

− ∫ I j u h ( x ) v x d x + u j + 1 2 − v j + 1 2 − − u j − 1 2 − v j − 1 2 + = ∫ I j f ( x ) v ( x ) d x (1) -\int_{I_j}u_h(x)v_x {\rm d}x + u_{j+\frac{1}{2}}^{-} v_{j+\frac{1}{2}}^{-} - u_{j-\frac{1}{2}}^{-} v_{j-\frac{1}{2}}^{+}=\int_{I_j}f(x)v(x){\rm d}x \tag{1} Ijuh(x)vxdx+uj+21vj+21uj21vj21+=Ijf(x)v(x)dx(1)

此时的格式与计算中如何选取 P k \bm{P}^k Pk的基函数的具体形式无关!基函数可以有多种选择,例如Legendre多项式函数,Lagrange插值基函数,自然幂函数( 1 , x , x 2 , . . . , x k 1,x,x^2,...,x^k 1,x,x2,...,xk),和 1 , x − x j Δ x j , ( x − x j Δ x j ) 2 , . . . , ( x − x j Δ x j ) k 1,\frac{x-x_j}{\Delta x_j}, \left(\frac{x-x_j}{\Delta x_j}\right)^2, ..., \left(\frac{x-x_j}{\Delta x_j}\right)^k 1,Δxjxxj,(Δxjxxj)2,...,(Δxjxxj)k等等。

求解方式

一般地,假定选取的基函数为 φ j 0 ( x ) , φ j 1 ( x ) , . . . , φ j k ( x ) \varphi_j^0(x),\varphi_j^1(x),...,\varphi_j^k(x) φj0(x),φj1(x),...,φjk(x),线性表出 u h ( x ) ∣ I j = ∑ l = 0 k u j l φ j l ( x ) u_h(x)|_{I_j}=\sum_{l=0}^k u_j^l \varphi_j^l(x) uh(x)Ij=l=0kujlφjl(x)。需要求解向量
u j = [ u j 0 u j 1 . . . u j k ] \bm{u}_j=\left[ \begin{matrix} u_j^0\\ u_j^1\\ ...\\u_j^k \end{matrix} \right] uj=uj0uj1...ujk

由于测试函数是任意的,只要在线性空间 W h = V h k \bm{W}_h=\bm{V}_h^k Wh=Vhk内就行。所以不妨取 v = φ j m ( x ) ,   m = 0 , 1 , . . . , k v=\varphi_j^m(x), \space m=0,1,...,k v=φjm(x), m=0,1,...,k,则上一节中的格式写为

− ∫ I j ∑ l = 0 k u j l φ j l ( x ) ( φ j m ) x d x + ∑ l = 0 k u j l φ j l ( x j + 1 2 ) φ j m ( x j + 1 2 ) − u j − 1 2 − φ j m ( x j − 1 2 ) = ∫ I j f ( x ) φ j m ( x ) d x -\int_{I_j}\sum_{l=0}^k u_j^l \varphi_j^l(x) (\varphi_j^m)_x {\rm d}x + \sum_{l=0}^k u_j^l \varphi_j^l(x_{j+\frac{1}{2}}) \varphi_j^m(x_{j+\frac{1}{2}}) - u_{j-\frac{1}{2}}^{-} \varphi_j^m(x_{j-\frac{1}{2}})=\int_{I_j}f(x) \varphi_j^m(x) {\rm d}x Ijl=0kujlφjl(x)(φjm)xdx+l=0kujlφjl(xj+21)φjm(xj+21)uj21φjm(xj21)=Ijf(x)φjm(x)dx

上式要对于 m = 0 , 1 , . . . , k m=0,1,...,k m=0,1,...,k均成立。注意其中的 u j − 1 2 − u_{j-\frac{1}{2}}^{-} uj21是隔壁单元算出来的结果值,传给本单元的。上式提取出 ∑ l = 0 k u j l \sum_{l=0}^k u_j^l l=0kujl,有

∑ l = 0 k u j l [ − ∫ I j φ j l ( x ) ( φ j m ) x d x + φ j l ( x j + 1 2 ) φ j m ( x j + 1 2 ) ] = u j − 1 2 − φ j m ( x j − 1 2 ) + ∫ I j f ( x ) φ j m ( x ) d x (2) \sum_{l=0}^k u_j^l\left[ - \int_{I_j} \varphi_j^l(x) (\varphi_j^m)_x {\rm d}x + \varphi_j^l(x_{j+\frac{1}{2}}) \varphi_j^m(x_{j+\frac{1}{2}}) \right] = u_{j-\frac{1}{2}}^{-} \varphi_j^m(x_{j-\frac{1}{2}}) + \int_{I_j}f(x) \varphi_j^m(x) {\rm d}x \tag{2} l=0kujl[Ijφjl(x)(φjm)xdx+φjl(xj+21)φjm(xj+21)]=uj21φjm(xj21)+Ijf(x)φjm(x)dx(2)

记:
a m l = − ∫ I j φ j l ( x ) ( φ j m ) x d x + φ j l ( x j + 1 2 ) φ j m ( x j + 1 2 ) (2-1) a_{ml}=- \int_{I_j} \varphi_j^l(x) (\varphi_j^m)_x {\rm d}x + \varphi_j^l(x_{j+\frac{1}{2}}) \varphi_j^m(x_{j+\frac{1}{2}}) \tag{2-1} aml=Ijφjl(x)(φjm)xdx+φjl(xj+21)φjm(xj+21)(2-1)

b m = u j − 1 2 − φ j m ( x j − 1 2 ) + ∫ I j f ( x ) φ j m ( x ) d x (2-2) b_{m} = u_{j-\frac{1}{2}}^{-} \varphi_j^m(x_{j-\frac{1}{2}}) + \int_{I_j}f(x) \varphi_j^m(x) {\rm d}x \tag{2-2} bm=uj21φjm(xj21)+Ijf(x)φjm(x)dx(2-2)

则在每个单元内都组成一个线性方程组: A j u j = b j \bm{A}_j\bm{u}_j=\bm{b}_j Ajuj=bj,其中 A j = ( a m l ) \bm{A}_j = (a_{ml}) Aj=(aml)是一个 ( k + 1 ) × ( k + 1 ) (k+1)\times(k+1) (k+1)×(k+1)的矩阵。

一旦 u j − 1 2 − u_{j-\frac{1}{2}}^{-} uj21给定,就可以求解该线性方程组。由此可见,DG的好处在于可以从左(给定了边界条件的一侧)向右逐次求解各个单元。

分析单元矩阵 A j \bm{A}_j Aj的性质。由于不同单元 I j I_j Ij中的基函数 φ j m ( x ) \varphi_j^m(x) φjm(x)映射到参考单元(reference element)后是一样的,
所以元素 a m l a_{ml} aml通过坐标参数变换(一维中的 ξ = 2 x − x j Δ x j \xi=2 \frac{x-x_j}{\Delta x_j} ξ=2Δxjxxj能将physical element中的坐标 x ∈ [ x j − 1 2 , x j + 1 2 ] x\in[x_{j-\frac{1}{2}}, x_{j+\frac{1}{2}}] x[xj21,xj+21]转成reference element的坐标 ξ ∈ [ − 1 , 1 ] \xi\in[-1,1] ξ[1,1])映射到参考单元后,它的数值是一样的。这意味着, A j \bm{A}_j Aj与实际的单元 I j I_j Ij的具体性质无关(independent of j j j),整体只要计算一次 A j \bm{A}_j Aj即可。下面简记为 A \bm{A} A

解的存在唯一性

A u j = b j \bm{A}\bm{u}_j=\bm{b}_j Auj=bj的解存在唯一等价于 A u j = 0 \bm{A}\bm{u}_j=\bm{0} Auj=0有且仅有零解。

这对应到原方程,相当于已知 f = 0 f=0 f=0和边界条件 a = 0 a=0 a=0时,能否推出解 u = 0 u=0 u=0

  1. 先证两端点为0。由测试函数的任意性,取 v ∣ I 1 = u h ∣ I 1 ∈ P k ( I 1 ) v|_{I_1}=u_h|_{I_1}\in\bm{P}^k(I_1) vI1=uhI1Pk(I1)。代入式(1)即为:
    − ∫ I j u h ( u h ) x d x + ( u h ) x 3 2 − ( u h ) x 3 2 − = 0 -\int_{I_j}u_h(u_h)_x {\rm d}x + (u_h)_{x_\frac{3}{2}}^{-} (u_h)_{x_\frac{3}{2}}^{-}=0 Ijuh(uh)xdx+(uh)x23(uh)x23=0
    推出 ( u h 2 ) 2 ∣ x 1 2 x 3 2 + [ ( u h ) x 3 2 − ] 2 = 0 \left( \frac{u_h}{2} \right)^2|_{x_\frac{1}{2}}^{x_\frac{3}{2}}+\left[(u_h)_{x_\frac{3}{2}}^{-}\right]^2=0 (2uh)2x21x23+[(uh)x23]2=0,显然有 ( u h ) x 3 2 − = ( u h ) x 1 2 + = a = 0 (u_h)_{x_\frac{3}{2}}^{-}=(u_h)_{x_\frac{1}{2}}^{+}=a=0 (uh)x23=(uh)x21+=a=0

  2. 再证在整个单元内为0。由上一步知道有 ∫ I 1 u h v x d x = 0 \int_{I_1}u_hv_x {\rm d}x =0 I1uhvxdx=0。而由条件知道近似解 u h u_h uh多项式有 ( x − x 1 2 ) (x-x_\frac{1}{2}) (xx21)的因子,可写为 u h ( x ) = ( x − x 1 2 ) u ^ ( x ) u_h(x)=(x-x_\frac{1}{2})\hat{u}(x) uh(x)=(xx21)u^(x),其中 u ^ ( x ) ∈ P k − 1 ( I 1 ) \hat{u}(x)\in \bm{P}^{k-1}(I_1) u^(x)Pk1(I1)。由测试函数的任意性,取 v ( x ) = ∫ x 1 2 x u ^ ( ξ ) d ξ v(x)=\int_{x_\frac{1}{2}}^x\hat{u}(\xi) {\rm d} \xi v(x)=x21xu^(ξ)dξ。则因为 ( x − x 1 2 ) (x-x_\frac{1}{2}) (xx21)恒大于0,积分 ∫ I 1 ( x − x 1 2 ) u ^ ( x ) v x d x = 0 \int_{I_1}(x-x_\frac{1}{2})\hat{u}(x)v_x {\rm d}x=0 I1(xx21)u^(x)vxdx=0当且仅当 u ^ ( x ) = 0 \hat{u}(x)=0 u^(x)=0,故整个单元 I 1 I_1 I1均为0.

  3. 以此类推逐个单元。

误差量度

L 2 L_2 L2范数误差:
L 2 : = ∣ ∣ u − u h ∣ ∣ L 2 = ( ∫ 0 1 ( u ( x ) − u h ( x ) ) 2 d x ) 1 2 L_2:=||u-u_h||_{L_2}=\left( \int_0^1 \left( u(x) - u_h(x)\right)^2 {\rm d}x \right)^\frac{1}{2} L2:=uuhL2=(01(u(x)uh(x))2dx)21

如何说明一个格式的阶数 r r r呢?假定在 h h h宽度下计算得到 e h ≈ C h r e_h\approx Ch^r ehChr,加密一倍得到 e 2 h ≈ C ( 2 h ) r e_{2h} \approx C(2h)^r e2hC(2h)r,则

e 2 h e h = 2 r   ⇒   r = log ⁡ 2 ( e 2 h e h ) \frac{e_{2h}}{e_h}=2^r \space \Rightarrow \space r = \log_2\left(\frac{e_{2h}}{e_h}\right) ehe2h=2r  r=log2(ehe2h)

举报

相关推荐

0 条评论