显式和隐式差分格式法是求解双曲型偏微分方程的两种常用方法。通过应用这两种方法计算二阶双曲型偏微分方程的数值解和误差,以及分析其程序运行时间,本文对其进行了深刻比较。结果发现:显式差分格式法计算简单,程序运行时间短,但是,当选取的步长比比较小的时候,显示差分格式法的算法不收敛;而隐式差分格式法,对任意的步长比都收敛,但是,其计算过程比较复杂,且程序运行时间较长。 Explicit and implicit difference schemes are two common methods for solving hyperbolic partial differential equations. By using these two methods to calculate the numerical solution and error of the second order hyperbolic partial differential equation, and analyzing the program running time, this paper makes a deep comparison between them. The results show that: the explicit difference scheme method is simple in calculation and its program running time is short, but when the se-lected step ratio is small, it shows that the algorithm of the explicit difference scheme method is not convergent; while the implicit difference scheme method is convergent for any step ratio, but its calculation process is more complex and the program running time is longer.
显式和隐式差分格式法是求解双曲型偏微分方程的两种常用方法。通过应用这两种方法计算二阶双曲型偏微分方程的数值解和误差,以及分析其程序运行时间,本文对其进行了深刻比较。结果发现:显式差分格式法计算简单,程序运行时间短,但是,当选取的步长比比较小的时候,显示差分格式法的算法不收敛;而隐式差分格式法,对任意的步长比都收敛,但是,其计算过程比较复杂,且程序运行时间较长。
双曲型方程,显式差分格式法,隐式差分格式法
Xintong Yang
School of Mathematics and Statistics, Northeastern University at Qinhuangdao, Qinhuangdao Hebei
Received: Jan. 13th, 2021; accepted: Feb. 16th, 2021; published: Feb. 24th, 2021
Explicit and implicit difference schemes are two common methods for solving hyperbolic partial differential equations. By using these two methods to calculate the numerical solution and error of the second order hyperbolic partial differential equation, and analyzing the program running time, this paper makes a deep comparison between them. The results show that: the explicit difference scheme method is simple in calculation and its program running time is short, but when the selected step ratio is small, it shows that the algorithm of the explicit difference scheme method is not convergent; while the implicit difference scheme method is convergent for any step ratio, but its calculation process is more complex and the program running time is longer.
Keywords:Hyperbolic Equation, Explicit Difference Scheme Method, Implicit Difference Scheme Method
Copyright © 2021 by author(s) and beplay安卓登录
This work is licensed under the Creative Commons Attribution International License (CC BY 4.0).
http://creativecommons.org/licenses/by/4.0/
作为用来刻画未知变量、时间导数、空间变量和导数之间的关系的偏微分方程的一种——二阶双曲型偏微分方程是最为常见和十分重要的 [
求解二阶双曲型的偏微分方程有多种方法。但是,当二阶双曲型偏微分方程的解析解难以求出时,人们常诉诸于数值模拟方法求其数值解。这其中,人们最常用的方法有显式差分格式和隐式差分格式方法 [
现给出一个双曲型波动方程问题,如下所示:
∂ 2 u ∂ t 2 − ∂ 2 u ∂ x 2 = 0 , 0 < x < 1 , 0 < t ≤ 1
u ( x , 0 ) = e x , ∂ u ∂ t ( x , 0 ) = e x , 0 < x < 1
u ( 0 , t ) = e t , u ( 1 , t ) = e 1 + t , 0 < t ≤ 1
该问题精确解为 u ( x , t ) = e x + t 。
首先,利用显式差分格式的方法求解其数值解,并求出此数值解的误差的绝对值。具体做法是:取空间步长h为1/100,时间步长 τ 为1/200,此时的步长比s为1/2,计算固定 x = 0.5 时,时间从0.1到1秒的数值解以及数值解和精确解之差的绝对值(误差),结果如表1所示。再次取空间步长和时间步长分别为1/100和1/100,结果如表2所示。第三次取他们的值分别为1/100和1/50,此时计算结果如表3所示。
(x, t) | 数值解 | 精确解 | 误差 |
---|---|---|---|
(0.5, 0.1) | 1.822118166 | 1.822118800 | 6.347874e−07 |
(0.5, 0.2) | 2.013751546 | 2.013752707 | 1.161856e−06 |
(0.5, 0.3) | 2.225539354 | 2.225540928 | 1.574483e−06 |
(0.5, 0.4) | 2.459601248 | 2.459603111 | 1.863540e−06 |
(0.5, 0.5) | 2.718279878 | 2.718281828 | 1.950804e−06 |
(0.5, 0.6) | 3.004165434 | 3.004166024 | 5.895138e−07 |
(0.5, 0.7) | 3.320117694 | 3.320116923 | 7.712292e−07 |
(0.5, 0.8) | 3.669298711 | 3.669296668 | 2.042968e−06 |
(0.5, 0.9) | 4.055203232 | 4.055199967 | 3.264843e−06 |
(0.5, 1.0) | 4.481693496 | 4.481689070 | 4.426127e−06 |
表1. 部分节点处精确解、数值解和误差绝对值 ( h = 1 / 100 , τ = 1 / 200 )
(x, t) | 数值解 | 精确解 | 误差 |
---|---|---|---|
(0.5, 0.1) | 1.822116048 | 1.822118800 | 2.752419e−06 |
(0.5, 0.2) | 2.013747175 | 2.013752707 | 5.532384e−06 |
(0.5, 0.3) | 2.225532561 | 2.225540928 | 8.367720e−06 |
(0.5, 0.4) | 2.459591824 | 2.459603111 | 1.128680e−05 |
(0.5, 0.5) | 2.718267510 | 2.718281828 | 1.431885e−05 |
(0.5, 0.6) | 3.004154737 | 3.004166024 | 1.128680e−05 |
(0.5, 0.7) | 3.320108555 | 3.320116923 | 8.367720e−06 |
(0.5, 0.8) | 3.669291135 | 3.669296668 | 5.532385e−06 |
(0.5, 0.9) | 4.055197214 | 4.055199967 | 2.752419e−06 |
(0.5, 1.0) | 4.481689070 | 4.481689070 | 1.421085e−14 |
表2. 部分节点处精确解、数值解和误差绝对值 ( h = 1 / 100 , τ = 1 / 100 )
(x, t) | 数值解 | 精确解 | 误差 |
---|---|---|---|
(0.5, 0.1) | 1.822107578 | 1.822118800 | 1.122231e−05 |
(0.5, 0.2) | 2.013729376 | 2.013752707 | 2.333121e−05 |
(0.5, 0.3) | 2.41268389 | 2.225540928 | 1.871430e+01 |
(0.5, 0.4) | −8.865401847e+04 | 2.459603111 | 8.865648e+04 |
(0.5, 0.5) | 3.950775415e+10 | 2.718281828 | 3.950775e+10 |
(0.5, 0.6) | −1.641415244e+16 | 3.004166024 | 1.641415e+16 |
(0.5, 0.7) | 6.038232892e+21 | 3.320116923 | 6.038233e+21 |
(0.5, 0.8) | −1.689514915e+27 | 3.669296668 | 1.689515e+27 |
(0.5, 0.9) | 6.910972393e+31 | 4.055199967 | 6.910972e+31 |
(0.5, 1.0) | 4.011360911e+38 | 4.481689070 | 4.011361e+38 |
表3. 部分节点处精确解、数值解和误差绝对值 ( h = 1 / 100 , τ = 1 / 50 )
由表1、表2、表3中的数据可以看出,当取空间步长和时间步长分别为1/100和1/200时,有效数字位数可以达到6位;当取空间步长和时间步长分别为1/100和1/100时,有效数字位数可以达到5位,他们都很好的逼近了精确解。然而,当空间步长和时间步长分别为1/100和1/50时误差非常大,此时显式差分格式方法也不收敛。
进一步,我们绘制出了空间步长和时间步长分别为1/10和1/20,1/20和1/40,1/40和1/80时,在某一时刻的误差曲线和整体的误差曲面图,如图1和图2所示。由这两个图可以看出,当空间步长和时间步长取1/10和1/20时数值解的误差较大,随着步长减小,每个坐标的误差均减小。
图1. t = 1时不同步长时对应的误差曲线
图2. 不同步长时对应的误差曲面
为分析不同步长下显式差分格式的准确程度,我们固定步长比为1/2,依次取空间步长为1/10、1/20一直到1/1280,计算在 x = 0.5 处的最大误差,以及步长细分时最大误差的比值。结果如表4所示。
h | τ | E ∞ ( h , τ ) | E ∞ ( 2 h , 2 τ ) / E ∞ ( h , τ ) |
---|---|---|---|
1/10 | 1/20 | 4.369783e−04 | * |
1/20 | 1/40 | 1.106462e−04 | 3.9493 |
1/40 | 1/80 | 2.771186e−05 | 3.9927 |
1/80 | 1/160 | 6.926296e−06 | 4.0010 |
1/160 | 1/320 | 1.732371e−06 | 3.9982 |
1/320 | 1/640 | 4.330753e−07 | 4.0002 |
1/640 | 1/1280 | 1.082610e−07 | 4.0003 |
1/1280 | 1/2560 | 2.706447e−08 | 4.0001 |
表4. 取不同步长时数值解的最大误差
根据表4可知,当时间步长从1/10变化到1/1280时,最大误差从 4.37 × 10 − 4 减小到 2.71 × 10 − 8 ,误差大幅度减小,说明步长越小,数值解的误差越小。同时,当时间步长与空间步长同时缩小为原来的1/2时,最大误差缩小为原来1/4。
程序的运行时间反应了算法的复杂程度和计算效率,因此下面计算当步长比固定为1/2时不同步长情况下的显式差分格式的程序运行时间。考虑计算机运行的不稳定性,5次重复运行,取时间的平均值,结果如表5,平均时间变化图如图3所示。
从表5可以看出,当空间步长和时间步长为1/10和1/20时,程序运行的时间约为0.001秒,而当空间步长和时间步长为1/5120和1/10,240,运行时间约为0.8秒,时间的变化非常大。从图3可以看出,当步长减小时,程序的运行时间逐渐增加,并且增加速度越来越快。
次数 | 第一次 | 第二次 | 第三次 | 第四次 | 第五次 | 均值 |
---|---|---|---|---|---|---|
空间步长 | ||||||
1/10 | 0.0047938 | 0.0002119 | 0.0001499 | 0.0002869 | 0.0002791 | 0.00114432 |
1/20 | 0.0020701 | 0.0003073 | 0.0002474 | 0.0003799 | 0.0002699 | 0.00065492 |
1/40 | 0.00131 | 0.0008426 | 0.000534 | 0.0008998 | 0.0005666 | 0.0008306 |
1/80 | 0.0017145 | 0.0017343 | 0.0011322 | 0.0019457 | 0.0015674 | 0.00161882 |
1/160 | 0.0055483 | 0.0035192 | 0.0030814 | 0.0046287 | 0.0048612 | 0.00432776 |
1/320 | 0.0059902 | 0.0087562 | 0.0080683 | 0.0074664 | 0.0091803 | 0.00789228 |
1/640 | 0.0167173 | 0.0210556 | 0.0145226 | 0.0205995 | 0.022362 | 0.0190514 |
1/1280 | 0.056834 | 0.049551 | 0.0543222 | 0.0576309 | 0.0643534 | 0.0565383 |
1/2560 | 0.2265084 | 0.2034202 | 0.2008477 | 0.2072619 | 0.2111032 | 0.20982828 |
1/5120 | 0.7837198 | 0.7825685 | 0.796066 | 0.8442899 | 0.8129564 | 0.80392012 |
表5. 不同步长下的显式差分格式计算时间
图3. 显式差分格式不同步长下的时间均值
下面利用隐式差分格式的方法再次求解上述问题的数值解,并求出其数值解的误差的绝对值。取空间步长为1/100,时间步长为1/100,此时的步长比为1,计算固定 x = 0.5 时,时间从0.1到1秒的数值解以及数值解和精确解之差的绝对值(误差)。结果如表6所示。其次再取空间步长和时间步长分别为1/200和1/200,再次求其数值解和误差,结果如表7所示。
进一步,我们也绘制出了当空间步长和时间步长取1/10和1/20,1/20和1/40,1/40和1/80时在某一时间的误差曲线和整体的误差曲面图,如图4和图5所示。由这两个图可以看出,当空间步长和时间步长取1/10和1/20时数值解的误差较大,随着步长减小,每个坐标的误差均减小。
(x, t) | 数值解 | 精确解 | 误差 |
---|---|---|---|
(0.5, 0.1) | 1.822120583 | 1.822118800 | 1.782186e−06 |
(0.5, 0.2) | 2.013757202 | 2.013752707 | 4.494834e−06 |
(0.5, 0.3) | 2.225549190 | 2.225540928 | 8.261075e−06 |
(0.5, 0.4) | 2.459616334 | 2.459603111 | 1.322333e−05 |
(0.5, 0.5) | 2.718301086 | 2.718281828 | 1.925730e−05 |
(0.5, 0.6) | 3.004189370 | 3.004166024 | 2.334548e−05 |
(0.5, 0.7) | 3.320143880 | 3.320116923 | 2.695716e−05 |
(0.5, 0.8) | 3.669326801 | 3.669296668 | 3.013383e−05 |
(0.5, 0.9) | 4.055232931 | 4.055199967 | 3.296452e−05 |
(0.5, 1.0) | 4.481724504 | 4.481689070 | 3.543386e−05 |
表6. 部分节点处精确解、数值解和误差绝对值 ( h = 1 / 100 , τ = 1 / 100 )
(x, t) | 数值解 | 精确解 | 误差 |
---|---|---|---|
(0.5, 0.1) | 1.822119249 | 1.822118800 | 4.481301e−07 |
(0.5, 0.2) | 2.013753836 | 2.013752707 | 1.128893e−06 |
(0.5, 0.3) | 2.225543002 | 2.225540928 | 2.073096e−06 |
(0.5, 0.4) | 2.459606428 | 2.459603111 | 3.316704e−06 |
(0.5, 0.5) | 2.71828668 | 2.718281828 | 4.856486e−06 |
(0.5, 0.6) | 3.004171899 | 3.004166024 | 5.875128e−06 |
(0.5, 0.7) | 3.320123669 | 3.320116923 | 6.746337e−06 |
(0.5, 0.8) | 3.669304218 | 3.669296668 | 7.550346e−06 |
(0.5, 0.9) | 4.055208217 | 4.055199967 | 8.250381e−06 |
(0.5, 1.0) | 4.481697926 | 4.481689070 | 8.855396e−06 |
表7. 部分节点处精确解、数值解和误差绝对值 ( h = 1 / 200 , τ = 1 / 200 )
图4. t = 1时不同步长时对应的误差曲线
图5. 不同步长时对应的误差曲面
为分析不同步长下显式差分格式的准确程度,我们固定步长比为1,依次取空间步长为1/10、1/20一直到1/640,计算在 x = 0.5 处的最大误差,以及步长细分时最大误差的比值,结果如表9所示。
根据表8中数据可知,当时间步长从1/10变化到1/640时,最大误差从0.003508减小到 8.67 × 10 − 7 ,误差大幅度减小,说明步长越小,数值解的误差越小。同时,当时间步长与空间步长同时缩小为原来的1/2时,最大误差缩小为原来1/4,最大误差的变化趋势与显式差分格式的变化趋势相似。
h | τ | E ∞ ( h , τ ) | E ∞ ( 2 h , 2 τ ) / E ∞ ( h , τ ) |
---|---|---|---|
1/10 | 1/10 | 0.003508 | * |
1/20 | 1/20 | 8.859737e−04 | 3.9592 |
1/40 | 1/40 | 2.219485e−04 | 3.9918 |
1/80 | 1/80 | 5.544056e−05 | 4.0034 |
1/160 | 1/160 | 1.385442e−05 | 4.0017 |
1/320 | 1/320 | 3.464567e−06 | 3.9989 |
1/640 | 1/640 | 8.660718e−07 | 4.0003 |
表8. 取不同步长时数值解的最大误差
下面计算当步长比固定为1时不同步长情况下的隐式差分格式的程序运行时间,考虑计算机运行的不稳定性,也重复运行5次,取时间的平均值,结果如表9所示,平均时间变化图如图6所示。
次数 | 第一次 | 第二次 | 第三次 | 第四次 | 第五次 | 均值 |
---|---|---|---|---|---|---|
空间步长 | ||||||
1/10 | 0.0186939 | 0.0009902 | 0.001156 | 0.0007517 | 0.001077 | 0.00453376 |
1/20 | 0.001981 | 0.0010297 | 0.0011978 | 0.0008154 | 0.0015323 | 0.00131124 |
1/40 | 0.00188 | 0.0022067 | 0.0013037 | 0.0022999 | 0.0017808 | 0.00189422 |
1/80 | 0.0031734 | 0.0039992 | 0.0026563 | 0.0040584 | 0.0041335 | 0.00360416 |
1/160 | 0.0085506 | 0.0071591 | 0.0075017 | 0.0075606 | 0.0075743 | 0.00766926 |
1/320 | 0.0157689 | 0.0157646 | 0.0215593 | 0.0180831 | 0.0157901 | 0.0173932 |
1/640 | 0.0452257 | 0.0463501 | 0.0503514 | 0.0506271 | 0.0431067 | 0.0471322 |
1/1280 | 0.1284789 | 0.1374374 | 0.1315172 | 0.133334 | 0.1284799 | 0.13184948 |
1/2560 | 0.4834762 | 0.521275 | 0.4831454 | 0.4791363 | 0.4928879 | 0.49198416 |
1/5120 | 1.8339433 | 1.8788296 | 1.8842463 | 1.8218807 | 1.8325131 | 1.8502826 |
表9. 不同步长下的隐式差分格式计算时间
从表9可以看出,当空间步长和时间步长为1/10和1/10时,程序运行的时间约为0.0045秒,而当空间步长和时间步长为1/5120和1/10240,运行时间约为1.85秒,时间的变化也非常大。从图6可以看出,当步长减小时,程序的运行时间逐渐增加,并且增加速度越来越快。与显式差分格式方法比较,隐式差分格式方法的运行时间较长,这说明隐式差分格式的复杂度较高。
图6. 隐式差分格式不同步长下的时间均值
本文对显式差分格式和隐式差分格式方法的特点进行了比较和分析,结论如下:
1) 运用显式差分格式得到数值解的收敛性取决于选取的步长比,当步长比小于等于1时算法是收敛的,因此需要注意设置的时间和空间步长;而隐式差分格式在任何情况下都是收敛的;
2) 在算法收敛的情况下显式差分格式和隐式差分格式得到的数值解的误差都比较小,并且设置的步长越小,划分的格数越多,运用两种方法得到的数值解的误差都越小,说明这两种方法都能很好地逼近精确解;
3) 对于显式差分格式和隐式差分格式方法,当步长比固定时,步长以2的倍数减小时,数值解的最大误差几乎以4的常速率减小;
4) 运用显式差分法和隐式差分法求解运行的时间均随划分的格数的增加而增加,说明格数越多,计算的次数越多,复杂度越高;
5) 当划分的格数相同时,运用显式差分法求解运行的时间要比隐式差分法运行的时间短,说明显式差分格式法比隐式差分格式法计算简单,求解效率更高。
综上所述,隐式差分格式法和显式差分格式法都是求解双曲型偏微分方程数值解的有效方法,但是各有特点。显式差分格式法对设置的步长比有限制,太小的步长比可能导致数值解不收敛,但是其程序运行时间短,计算效率高,而隐式差分格式法对任意的步长都可以求解,但是程序运行的时间较长,计算较复杂。
杨欣童. 对双曲型方程两种差分格式方法的比较研究A Comparative Study of Two Difference Schemes for Hyperbolic Equations[J]. 理论数学, 2021, 11(02): 261-270. https://doi.org/10.12677/PM.2021.112035
https://doi.org/10.1016/j.rinam.2020.100139
http://dx.chinadoi.cn/10.3969/j.issn.1671-8127.2019.03.018
http://dx.chinadoi.cn/10.7640/zggwjs202011007
https://doi.org/10.1063/1.1699629
https://doi.org/10.1029/SP030p0086
https://doi.org/10.1111/j.1365-246X.1975.tb05890.x
http://dx.chinadoi.cn/10.3969/j.issn.1001-1986.2016.02.019