二维 Possion 方程五点差分格式的 MATLAB 编程实现。
二维 Possion 方程
考虑二维 Possion 方程:
其中 $\partial \Omega$ 为区域 $\Omega$ 的边界,$f(x,y)$ 和 $\phi(x)$ 为已知函数,$u|_{\partial \Omega}=\phi(x,y)$ 为边界条件。
五点差分格式
考虑 $\Omega$ 为矩形的情况,即 $a<x<b$,$c<x<d$. 取定沿 $x$ 轴和 $y$ 轴的步长 $h_1$ 和 $h_2$,$h_{1}=(b-a) / N, h_{2}=(d-c) / M$. 则
$(x_{i}, y_{j})$ 称为网格节点。
二维 Possion 方程的五点差分格式:
先定义向量 $\boldsymbol{u}_{j}$:
差分格式可以写为矩阵形式:
其中矩阵 $\boldsymbol{C}$、$\boldsymbol{D}$、向量 $\boldsymbol{f}_j$ 的定义如下,注意向量 $\boldsymbol{f}_j$ 的首尾元素已包含了 $x=a$ 和 $x=b$ 处的边界条件。
以上矩阵形式的差分格式还可以进一步写为如下的矩阵形式,注意等号右边向量的首尾元素加入了 $y=c$ 和 $y=d$ 处的边界条件。
数值例子 1
其中 $f(x,y)=-2 \pi^{2} e^{\pi(x+y)}(\sin \pi x \cos \pi y+\cos \pi x \sin \pi y).$
方程的真解:
计算数值解
1 | % fdm2d1.m |
计算收敛阶
1 | % fdm2d1_error.m |
输出结果
1 | Error = |
数值例子 2
方程的真解:$u=(9+\pi^{2})^{-1} \cos(3 x) \sin(\pi y).$
对应《微分方程数值解法》104-105 页数值例子。
差分格式:
边界条件为
计算数值解
1 | % fdm2d2.m |
输出结果
对应书上结果
1 | N = |
计算收敛阶
1 | % fdm2d2_error.m |
输出结果
1 | Error = |
思考:五点差分格式的收敛阶应该 2 阶,为什么结果是 1 阶,思考之后发现是因为边界条件。