Tintingoo's Blog

从泰勒展开推导弹性波动方程的有限差分近似

Tintingo / 2022-02-22


以一维弹性波动方程为例:

(1)2u(x,t)x2=1c22u(x,t)t2+f(x,t)

式中,位移 u(x,t) 是空间坐标 x 和时间 t 的单值连续函数,c 为波速,f(x,t) 为源项。

从泰勒展开推导弹性波动方程的有限差分近似

空间差分算子的推导

首先对位移函数 u(x,t) 在坐标 x 两侧附近作泰勒展开:

(2)u(x+Δx,t)=u(x,t)+Δxu(x,t)x+12Δx22u(x,t)x2+16Δx33u(x,t)x3+

(3)u(xΔx,t)=u(x,t)Δxu(x,t)x+12Δx22u(x,t)x216Δx33u(x,t)x3+

位移对空间一阶偏导数的近似形式推导

用 式 2 减去 式 3

u(x+Δx,t)u(xΔx,t)=2Δu(x,t)x+13Δx33u(x,t)x3+O(Δx4)

u(x,t)x 移到左边,就可以得到:

u(x,t)x=u(x+Δx,t)u(xΔx,t)2Δx16Δx23u(x,t)x3O(Δx3)

考虑到 Δx0 是一个小量,因此得到:

u(x,t)x=u(x+Δx,t)u(xΔx,t)2Δx+O(Δx2)=Dxu+O(Δx2)

式中,Dx 称为 差分算子O(Δx2) 称为差分算子的 截断误差

与公式中的其他项相比,小量 Δx 的二阶及更高阶指数项可以忽略时,得到 位移对空间一阶偏导数的近似形式

(4)u(x,t)xDxu=u(x+Δx,t)u(xΔx,t)2Δx

位移对空间二阶偏导数的近似形式推导

用 式 2 加上 式 3,得到:

u(x+Δx,t)+u(xΔx,t)=2u(x,t)+Δx22u(x,t)x2+O(Δx4)

2u(x,t)x2 移到左边,整理为:

2u(x,t)x2=u(x+Δx,t)+u(xΔx,t)2u(x,t)Δx2+O(Δx2)=Dxxu+O(Δx2)

式中,Dxx二阶差分算子O(Δx2) 称为差分算子的 截断误差

与公式中的其他项相比,小量 Δx 的二阶及更高阶指数项可以忽略时,得到 位移对空间二阶偏导数的近似形式

(5)2u(x,t)x2Dxxu=u(x+Δx,t)+u(xΔx,t)2u(x,t)Δx2

因此,位移函数在坐标 x 处的一阶和二阶偏导数,都可以近似表示为 x 附近函数值的差商形式,截断误差均为 O(Δx2)

时间差分算子的推导

首先对位移函数 u(x,t) 在坐标 t 两侧附近作泰勒展开:

(6)u(x,t+Δt)=u(x,t)+Δtu(x,t)t+12Δt22u(x,t)t2+16Δt33u(x,t)t3+

(7)u(x,tΔt)=u(x,t)Δtu(x,t)t+12Δt22u(x,t)t216Δt33u(x,t)t3+

与上述空间差分算子的推导过程类似,位移函数对时间的偏导数用差分算子 Dt, Dtt 表示为:

(8)u(x,t)tDtu=u(x,t+Δt)u(x,t+Δt)2Δt

(9)2u(x,t)t2Dttu=u(x,t+Δt)+u(x,t+Δt)2u(x,t)Δt2

截断误差为 O(Δt2)

一维波动方程的有限差分近似

使用公式 4, 5, 8, 9 中的差分算子代替波动方程 1 中的微分算子,可以将波动方程近似为:

(10)u(x+Δx,t)+u(xΔx,t)2u(x,t)Δx2=1c2u(x,t+Δt)+u(x,tΔt)2u(x,t)Δt2+f(x,t)

接下来我们对连续的波动方程求解域离散化,对求解域进行均匀网格划分,空间和时间步长分别为 Δx, Δt, 如下图所示:

经过离散化的空间坐标和时间坐标可以表示为:

x=xj=jΔx,j=0,±1,±2,

t=tn=nΔt,n=0,±1,±2,

对求解域离散化后,可以将离散化的波动方程表示为如下式所示的形式:

(11)uj+1n+uj1n2ujnΔx2=1c2ujn+1+ujn12ujnΔt2+fjn,j=0,±1,±2,;n=0,1,2,

将上式整理,得到 ujn+1 的外推格式:

(12)ujn+1=cj2dt2dx2[uj+1n2ujn+uj1n]+2ujnujn1+dt2fjn

当第 n1 层的值 ujn1 和第 n 层的值 uj1n, ujn, uj+1n 的值已知时,可以直接计算得到第 n+1 层的值 ujn+1。因此这种差分格式为三层显式差分格式。

在计算的过程中,先对计算同一时刻的空间离散网格上的 u,也就是先求每一层的值,上一层算完了再算下一层。下面这个图片可能对理解计算的过程有帮助。