有限差分法(Finite Difference Method)解方程:边界和内部结点的控制方程

本文转载自本人发布在简书平台上的文章

1. FDM解常微分方程

1.1. 问题描述

d 2 ϕ d x 2 = S ϕ (1) \frac{d^2\phi}{dx^2}=S_{\phi} \tag{1} dx2d2ϕ=Sϕ(1)
这是二阶常微分方程(second-order Ordinary Differential Equation, ODE),考虑最简单的情况即 S = 0 S=0 S=0,积分后可得 ϕ = c 1 x + c 2 \phi=c_1x+c_2 ϕ=c1x+c2,有两个待定系数,因此要求解该方程必须提供两个边界条件(因为方程中不包含时间项,因此无初始条件),例如

ϕ ( x L ) = ϕ L ϕ ( x R ) = ϕ R \phi(x_L)=\phi_L \quad \phi(x_R)=\phi_R ϕ(xL)=ϕLϕ(xR)=ϕR

1.2. 场和边界

我们把上述方程转化为一个场(field)。试想存在一维(因为 ϕ \phi ϕ仅与一个变量有关)直线,线上有若干等距分布的结点(node),每个结点都有唯一的 ϕ \phi ϕ,那么 ϕ \phi ϕ x x x的关系满足上述方程。

内部结点满足方程,那么边界上的 ϕ ( x L ) \phi(x_L) ϕ(xL) ϕ ( x R ) \phi(x_R) ϕ(xR)呢?事实上,边界应是内部结点的延申,即边界点也应该满足上述方程。这也是为什么我们可以通过两个边界条件求解 ϕ = c 1 x + c 2 \phi=c_1x+c_2 ϕ=c1x+c2的原因,这隐含的假设就是边界点满足常微分方程。

1.3. 结点上的值

用数值方法求解上述方程等价于求解场内每个结点上的 ϕ \phi ϕ,结点 i i i的上式表达为

d 2 ϕ d x 2 ∣ i \frac{d^2\phi}{dx^2}\bigg|_{i} dx2d2ϕ i

如何从结点值 ϕ i \phi_i ϕi得到导数值?很自然想到用Taylor展开。需要注意的是,Taylor展开隐含的假设是 ϕ \phi ϕ无限可导。将 i i i关于周围两点做Taylor展开,即

taylor_2nodes.png

假设等距,则

d 2 ϕ d x 2 ∣ i = ϕ i + 1 + ϕ i − 1 − 2 ϕ i ( Δ x ) 2 − ( Δ x ) 2 12 d 4 ϕ d x 4 ∣ i + . . . (2) \frac{d^2\phi}{dx^2}\bigg|_{i} =\frac{\phi_{i+1}+\phi_{i-1}-2\phi_i}{(\Delta x)^2}-\frac{(\Delta x)^2}{12} \frac{d^4\phi}{dx^4}\bigg|_{i} + ... \tag{2} dx2d2ϕ i=(Δx)2ϕi+1+ϕi12ϕi12(Δx)2dx4d4ϕ i+...(2)

ε i = − ( Δ x ) 2 12 d 4 ϕ d x 4 ∣ i + . . . \varepsilon_i=-\frac{(\Delta x)^2}{12} \frac{d^4\phi}{dx^4}\bigg|_{i} + ... εi=12(Δx)2dx4d4ϕ i+...

其中 ε i \varepsilon_i εi为离散误差或截断误差(discretization or truncation error),该误差正比于距离的平方,因此我们称上式对导数的逼近有二阶精度

1.4. 边界条件

上一部分是对场内部结点的推导。边界上结点的值为边界条件,有以下三种形式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JFA8eir9-1659235581146)(https://upload-images.jianshu.io/upload_images/27641975-f329c2341566c1ba.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

1.4.1. Dirichlet

ϕ i = 1 = ϕ L \phi_{i=1}=\phi_L ϕi=1=ϕL

1.4.2. Neumann

d ϕ d x ∣ i = 1 = J L (3) \frac{d\phi}{dx}\bigg|_{i=1}=J_L \tag{3} dxdϕ i=1=JL(3)

将结点2关于结点1做Taylor展开,可以得到一阶精度的梯度表达式

d ϕ d x ∣ i = 1 = ϕ 2 − ϕ 1 Δ x + ε ( Δ x ) (4) \frac{d\phi}{dx}\bigg|_{i=1}=\frac{\phi_2-\phi_1}{\Delta x}+\varepsilon(\Delta x) \tag{4} dxdϕ i=1=Δxϕ2ϕ1+ε(Δx)(4)

将结点3关于结点1做Taylor展开,结合上式可以进一步得到二阶精度

d ϕ d x ∣ i = 1 = 4 ϕ 2 − ϕ 3 − 3 ϕ 1 2 Δ x + ε ( Δ x 2 ) (5) \frac{d\phi}{dx}\bigg|_{i=1}=\frac{4\phi_2-\phi_3-3\phi_1}{2\Delta x}+\varepsilon(\Delta x^2) \tag{5} dxdϕ i=1=x4ϕ2ϕ33ϕ1+ε(Δx2)(5)

对于非Dirichlet的边界条件,应尽量让边界点也满足内部结点的控制方程。
ϕ 2 \phi_2 ϕ2 ϕ 3 \phi_3 ϕ3关于结点1展开可得

ϕ 2 = ϕ 1 + ( Δ x ) d ϕ d x ∣ i = 1 + ( Δ x 2 ) d 2 ϕ d x 2 ∣ i = 1 . . . ϕ 3 = ϕ 1 + ( 2 Δ x ) d ϕ d x ∣ i = 1 + ( 4 Δ x 2 ) d 2 ϕ d x 2 ∣ i = 1 . . . \phi_2=\phi_1+(\Delta x)\frac{d\phi}{dx}\bigg|_{i=1}+(\Delta x^2)\frac{d^2\phi}{dx^2}\bigg|_{i=1}... \\ \phi_3=\phi_1+(2\Delta x)\frac{d\phi}{dx}\bigg|_{i=1}+(4\Delta x^2)\frac{d^2\phi}{dx^2}\bigg|_{i=1}... ϕ2=ϕ1+(Δx)dxdϕ i=1+(Δx2)dx2d2ϕ i=1...ϕ3=ϕ1+(x)dxdϕ i=1+(x2)dx2d2ϕ i=1...

将边界条件公式(3)代入上式可得

ϕ 2 = ϕ 1 + ( Δ x ) J L + . . . ϕ 3 = ϕ 1 + ( 2 Δ x ) J L + . . . \phi_2=\phi_1+(\Delta x)J_L+... \\ \phi_3=\phi_1+(2\Delta x)J_L+... ϕ2=ϕ1+(Δx)JL+...ϕ3=ϕ1+(x)JL+...

将上式整理并消去三阶导数项( d 3 ϕ / d x 3 d^3\phi/dx^3 d3ϕ/dx3)可得结点1满足的二阶导数项的离散格式:

d 2 ϕ d x 2 ∣ i = 1 = 8 ϕ 2 − ϕ 3 − 7 ϕ 1 − ( 6 Δ x ) J L 2 ( Δ x ) 2 + ε ( Δ x 2 ) (6) \frac{d^2\phi}{dx^2}\bigg|_{i=1}=\frac{8\phi_2-\phi_3-7\phi_1-(6\Delta x)J_L}{2(\Delta x)^2}+\varepsilon(\Delta x^2) \tag{6} dx2d2ϕ i=1=2(Δx)28ϕ2ϕ37ϕ1(x)JL+ε(Δx2)(6)

上式为结点1满足的控制方程,并用上了梯度边界条件。需要说明的是,不用公式(6)而用公式(4,5)同样可以求解问题,但是前者的精度更高。

上述处理方式的意义:FDM的操作流程是对微分方程逐项离散、在每个结点上离散。本节离散的ODE只包含一个二阶导数项,需要在每个结点上对其离散。前文对内部结点采用二阶中心差分离散,我们同样希望在边界点对二阶导数项做离散,因此有了方程(6).

除了上述采用内结点对边界结点Taylor展开的方式,《数值传热学》4.3.2小节给出了另一种方法,即设置边界外的辅助结点,此处不再展开。

1.4.3. Robin

α ϕ 1 + β d ϕ d x ∣ i = 1 = γ \alpha \phi_1 + \beta \frac{d\phi}{dx}\bigg|_{i=1}=\gamma αϕ1+βdxdϕ i=1=γ

类似地,令边界结点1既满足控制方程又满足边界条件。对上式移项可得

d ϕ d x ∣ i = 1 = γ − α ϕ 1 β \frac{d\phi}{dx}\bigg|_{i=1}=\frac{\gamma-\alpha \phi_1}{\beta} dxdϕ i=1=βγαϕ1

同样代入 ϕ 2 \phi_2 ϕ2 ϕ 3 \phi_3 ϕ3的Taylor展开,

ϕ 2 = ϕ 1 + ( Δ x ) ( γ − α ϕ 1 β ) + . . . ϕ 3 = ϕ 1 + ( 2 Δ x ) ( γ − α ϕ 1 β ) + . . . \phi_2=\phi_1+(\Delta x) \left( \frac{\gamma-\alpha \phi_1}{\beta} \right) +... \\ \phi_3=\phi_1+(2\Delta x) \left( \frac{\gamma-\alpha \phi_1}{\beta} \right) +... ϕ2=ϕ1+(Δx)(βγαϕ1)+...ϕ3=ϕ1+(x)(βγαϕ1)+...

消去三阶导数项并移项可得

d 2 ϕ d x 2 ∣ i = 1 = 8 ϕ 2 − ϕ 3 − 7 ϕ 1 − ( 6 Δ x ) J L 2 ( Δ x ) 2 + ε ( Δ x 2 ) (7) \frac{d^2\phi}{dx^2}\bigg|_{i=1}=\frac{8\phi_2-\phi_3-7\phi_1-(6\Delta x)J_L}{2(\Delta x)^2}+\varepsilon(\Delta x^2) \tag{7} dx2d2ϕ i=1=2(Δx)28ϕ2ϕ37ϕ1(x)JL+ε(Δx2)(7)

其中

J L = d ϕ d x ∣ i = 1 = γ − α ϕ 1 β J_L=\frac{d\phi}{dx}\bigg|_{i=1}=\frac{\gamma-\alpha \phi_1}{\beta} JL=dxdϕ i=1=βγαϕ1

1.5. 组建矩阵

有了内部结点的离散格式和边界条件,我们便可对每个结点列方程。由于结点 i i i离散格式中势必会包含其他结点信息,例如对结点 i i i

A i , 1 ϕ 1 + . . . + A i , i − 1 ϕ i − 1 + A i , i ϕ i + A i , i + 1 ϕ i + 1 + . . . + A i , N ϕ N = Q i A_{i,1}\phi_1 + ... + A_{i,i-1}\phi_{i-1} + A_{i,i}\phi_i + A_{i,i+1}\phi_{i+1} + ... + A_{i,N}\phi_N =Q_i Ai,1ϕ1+...+Ai,i1ϕi1+Ai,iϕi+Ai,i+1ϕi+1+...+Ai,NϕN=Qi

将所有结点的方程组合起来,借助矩阵运算求解。

2. FDM求解泊松方程:二维问题

二维Poisson方程:

∇ 2 ϕ = ∂ 2 ϕ ∂ x 2 + ∂ 2 ϕ ∂ y 2 = S ϕ (8) \nabla^2 \phi=\frac{\partial^2 \phi}{\partial x^2} + \frac{\partial^2 \phi}{\partial y^2} = S_{\phi} \tag{8} 2ϕ=x22ϕ+y22ϕ=Sϕ(8)

如果 S ϕ = 0 S_{\phi}=0 Sϕ=0,则退化为Laplace方程。二阶偏导数项同样使用Taylor展开,只不过针对该问题应使用二维展开。如果使用正交网格结点,则相当于在每一维独自做Taylor展开。

按下图所示,网格结点可分为内部结点和边界结点。

Cartesian_grid.png

2.1. 内部结点控制方程

由上文公式(2)可知,两个二阶偏导数项可分别写为

∂ 2 ϕ ∂ x 2 ∣ i , j = ϕ i + 1 , j + ϕ i − 1 , j − 2 ϕ i , j ( Δ x ) 2 + ε ( Δ x 2 ) (9) \frac{\partial^2\phi}{\partial x^2}\bigg|_{i,j} =\frac{\phi_{i+1,j}+\phi_{i-1,j}-2\phi_{i,j}}{(\Delta x)^2} + \varepsilon(\Delta x^2) \tag{9} x22ϕ i,j=(Δx)2ϕi+1,j+ϕi1,j2ϕi,j+ε(Δx2)(9)

∂ 2 ϕ ∂ y 2 ∣ i , j = ϕ i , j + 1 + ϕ i , j − 1 − 2 ϕ i , j ( Δ y ) 2 + ε ( Δ y 2 ) (10) \frac{\partial^2\phi}{\partial y^2}\bigg|_{i,j} =\frac{\phi_{i,j+1}+\phi_{i,j-1}-2\phi_{i,j}}{(\Delta y)^2} + \varepsilon(\Delta y^2) \tag{10} y22ϕ i,j=(Δy)2ϕi,j+1+ϕi,j12ϕi,j+ε(Δy2)(10)

去掉高阶项,可得内部结点控制方程

ϕ i + 1 , j + ϕ i − 1 , j − 2 ϕ i , j ( Δ x ) 2 + ϕ i , j + 1 + ϕ i , j − 1 − 2 ϕ i , j ( Δ y ) 2 ≈ S i , j (11) \frac{\phi_{i+1,j}+\phi_{i-1,j}-2\phi_{i,j}}{(\Delta x)^2} + \frac{\phi_{i,j+1}+\phi_{i,j-1}-2\phi_{i,j}}{(\Delta y)^2} \approx S_{i,j} \tag{11} (Δx)2ϕi+1,j+ϕi1,j2ϕi,j+(Δy)2ϕi,j+1+ϕi,j12ϕi,jSi,j(11)

2.2. 下边界

Robin边界条件

α ϕ ( x , 0 ) + β ∂ ϕ ∂ y ∣ x , 0 = γ \alpha \phi (x,0) + \beta \frac{\partial \phi}{\partial y}\bigg|_{x,0} = \gamma αϕ(x,0)+βyϕ x,0=γ

对于下边界的某个非边角结点 ( i , 1 ) (i,1) (i,1),其中 i ≠ 1 , i ≠ N i\neq 1, i\neq N i=1,i=N,根据公式(7)来构建既满足边界条件又满足内部结点控制方程的离散格式,即公式(7)

∂ 2 ϕ ∂ y 2 ∣ i , 1 = 8 ϕ i , 2 − ϕ i , 3 − ( 7 − 6 Δ y α β ) ϕ i , 1 − 6 Δ y ( γ / β ) 2 ( Δ y ) 2 (12) \frac{\partial^2\phi}{\partial y^2}\bigg|_{i,1} = \frac{8\phi_{i,2}-\phi_{i,3}-(7-6\Delta y \frac{\alpha}{\beta}) \phi_{i,1} - 6\Delta y (\gamma / \beta)}{2(\Delta y)^2} \tag{12} y22ϕ i,1=2(Δy)28ϕi,2ϕi,3(7yβα)ϕi,1y(γ/β)(12)

而下边界上 x x x的二阶偏导数项仍按照公式(9)离散。因此,下边界结点的控制方程由公式(9)和(12)组成。

2.3. 右边界

Neumann边界条件

∂ ϕ ∂ x ∣ L , y = J R \frac{\partial\phi}{\partial x}\bigg|_{L,y} = J_R xϕ L,y=JR

使用公式(6)得到 x x x的二阶偏导数项,即

∂ 2 ϕ ∂ x 2 ∣ N , j = 8 ϕ N − 1 , j − ϕ N − 2 , j − 7 ϕ N , j − ( 6 Δ x ) J R 2 ( Δ x ) 2 (13) \frac{\partial^2\phi}{\partial x^2}\bigg|_{N,j}=\frac{8\phi_{N-1,j}-\phi_{N-2,j}-7\phi_{N,j}-(6\Delta x)J_R}{2(\Delta x)^2} \tag{13} x22ϕ N,j=2(Δx)28ϕN1,jϕN2,j7ϕN,j(x)JR(13)

y y y的二阶偏导数项仍用公式(10)。右下角的结点 ( N , 1 ) (N,1) (N,1)应同时满足Robin和Neumann边界条件,该结点的 x x x偏导数项应使用公式(13), y y y应使用公式(12)

2.4. 上边界和左边界

Dirichlet边界条件:

ϕ ( 0 , y ) = ϕ L ϕ ( x , H ) = ϕ T \phi(0,y)=\phi_L \\ \phi(x,H)=\phi_T ϕ(0,y)=ϕLϕ(x,H)=ϕT

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值