首页 理论教育 使用多步法精确求解微分方程的二阶数值积分算法

使用多步法精确求解微分方程的二阶数值积分算法

时间:2023-06-30 理论教育 版权反馈
【摘要】:考虑p=0和k=1的情形,这种情形满足式(5.9)的限制,因此可以使用上述方法来确定多步法的系数,使得对次数为1的多项式,多步法公式是精确成立的。由式~式,可得a0=1,,,故有这个二阶数值积分算法被称为梯形法,它也是一种隐式算法。例5.1采用不同的固定步长,基于Euler法、后退Euler法、梯形法和Runge-Kutta法数值求解如下微分方程。

使用多步法精确求解微分方程的二阶数值积分算法

另一种求解式(5.1)的方法是用一个k次多项式来逼近非线性函数xt),

978-7-111-58306-6-Chapter05-15.jpg

式中,系数α0α1,…,αk为常数。可以证明,任何函数都能在有限区间[t0tN]上用一个足够高次的多项式进行逼近(误差小于事先给定的ε)。引入多步法后,式(5.1)的求解就与多项式逼近联系起来了。在多步法中,xn+1依赖于前面若干节点处的xnxn-1,…及相对应的fxntn),fxn-1tn-1),…;而单步法(比如Runge-Kutta法)只依赖于前一步的信息。一般地,

978-7-111-58306-6-Chapter05-16.jpg

为了将数值积分算法与多项式逼近联系起来,必须建立两套系数之间的关系。一个k次多项式由k+1个系数(α0,…,αk)唯一确定。而上述数值积分算法有2p+3个系数,因此pk之间必须满足如下关系:

2p+3≥k+1 (5.9)

数值积分算法的阶数等于以t变量的多项式的最高次数k,对此多项式,数值解与精确解完全重合。这些系数可以通过选择一系列基函数[ϕ1tϕ2t)…ϕkt)]来确定,基函数的表达式为

ϕjt)=tjj=0,1,…,k

将这些基函数代入到多步法式(5.8)中,得到

978-7-111-58306-6-Chapter05-17.jpg

式中,j=0,1,…,k

用上述方法可以推导出几个一阶数值积分算法。考虑p=0和k=1的情形,这种情形满足式(5.9)的限制,因此可以使用上述方法来确定多步法的系数,使得对次数为1的多项式,多步法公式是精确成立的。当k=1时,基函数集合为

ϕ0t)=1 (5.10)

ϕ1t)=t (5.11)

基函数的导数

978-7-111-58306-6-Chapter05-18.jpg

多步法方程为

xn+1=a0xn+b-1hn+1fxn+1tn+1)+b0hn+1fxntn) (5.14)

将基函数代入多步法式(5.14),得到如下两个方程

978-7-111-58306-6-Chapter05-19.jpg

将式(5.10)和式(5.11)代入式(5.15)和式(5.16),得到

1=a0(1)+b-1hn+1(0)+b0hn+1(0) (5.17)

tn+1=a0tn+b-1hn+1(1)+b0hn+1(1) (5.18)

由式(5.17),可得a0=1。由tn+1-tn=hn+1和式(5.18),可得

b-1+b0=1 (5.19)

阶数p和次数k的选择导致了具有3个未知数的2个方程,因此,其中一个未知数可以取任意值。当选择a0=1,b-1=0,b0=1时,可以得到Euler法:

xn+1=xn+hn+1fxntn

而当选择a0=1,b-1=1,b0=0时,可以得到另一种数值积分算法:

xn+1=xn+hn+1fxn+1tn+1) (5.20)

这种特殊的数值积分算法通常被称为后退Euler法。注意,在这种算法中,系数b-1不为零,因此xn+1的表达式隐式地依赖于函数fxn+1tn+1)。对于b-1≠0的数值积分算法,通常被称为隐式算法,否则就称为显式算法。因为fxn+1tn+1)隐式地(且通常是非线性地)依赖于xn+1,所以隐式算法一般需要在每个时间节点上进行迭代求解。

现在考察p=0,k=2的情形,此时2p+3=k+1,因此所有系数可以被唯一确定。采用与前面一样的基函数取法,且取ϕ2t)=t2978-7-111-58306-6-Chapter05-20.jpg,可得如下3个方程:

1=a0(1)+b-1hn+1(0)+b0hn+1(0) (5.21)

tn+1=a0tn+b-1hn+1(1)+b0hn+1(1) (5.22)

t2n+1=a0t2n+hn+1b-1(2tn+1)+b0(2tn)) (5.23)

如果tn=0,那么有tn+1=hn+1。由式(5.21)~式(5.23),可得a0=1,978-7-111-58306-6-Chapter05-21.jpg978-7-111-58306-6-Chapter05-22.jpg,故有

978-7-111-58306-6-Chapter05-23.jpg

这个二阶数值积分算法被称为梯形法,它也是一种隐式算法。上述公式之所以被称为梯形法,是因为式(5.24)的右边第二项可以被理解为一个梯形的面积。由于在计算xn+1时使用了tntn+1时的信息,因此梯形法可以被看作为两步法。

例5.1采用不同的固定步长,基于Euler法、后退Euler法、梯形法和Runge-Kutta法数值求解如下微分方程。

978-7-111-58306-6-Chapter05-24.jpg

解5.1这个二阶微分方程必须首先转化为常微分方程组的形式,令x1=x978-7-111-58306-6-Chapter05-25.jpg,有

978-7-111-58306-6-Chapter05-26.jpg

978-7-111-58306-6-Chapter05-27.jpg

通过观察,可知该方程组的解析解为

x1t)=cost (5.28)

x2t)=-sint (5.29)通常难以找到常微分方程的精确解,但在本例中,该精确解将被用来与数值解作比较。(www.xing528.com)

(1)向前Euler法

使用向前Euler法解上述常微分方程组,可得

x1,n+1=x1,n+hf1x1,nx2,n) (5.30)

=x1,n+hx2,n (5.31)

x2,n+1=x2,n+hf2x1,nx2,n) (5.32)

=x2,n-hx1,n (5.33)

矩阵形式表示

978-7-111-58306-6-Chapter05-28.jpg

(2)后退Euler法

使用后退Euler法解上述常微分方程组,可得

x1,n+1=x1,n+hf1x1,n+1x2,n+1) (5.35)

=x1,n+hx2n+1 (5.36)

x2,n+1=x2,n+hf2x1,n+1x2,n+1) (5.37)

=x2,n-hx1,n+1 (5.38)

用矩阵形式表示

978-7-111-58306-6-Chapter05-29.jpg

在求解式(5.39)时,矩阵的逆实际上不是显式给出的,而是采用LU分解的方法来求解此方程的。

(3)梯形法

使用梯形法解上述常微分方程组,可得

978-7-111-58306-6-Chapter05-30.jpg

用矩阵形式表示

978-7-111-58306-6-Chapter05-31.jpg

(4)Runge-Kutta法

使用Runge-Kutta法解上述常微分方程组,可得

k11=x2,nk21=-x1,n

978-7-111-58306-6-Chapter05-32.jpg

k14=x2,n+hk13k24=-x1,n-hk23

978-7-111-58306-6-Chapter05-33.jpg

978-7-111-58306-6-Chapter05-34.jpg

图5.1 例5.1的各种数值解

采用不同的数值积分算法求解式(5.25)的结果如图5.1所示,图中也给出了精确解cost。注意,梯形法和Runge-Kutta法所得的结果与精确解几乎不可区分。由于向前Euler法和后退Euler法是一阶算法,其精度不如高阶的梯形法和Runge-Kutta法。注意,向前Euler法所得的结果比精确解的幅值稍大,且幅值随着时间的推移越来越大。相反地,后退Euler法所得的结果比精确解的幅值稍小,且幅值随着时间的推移越来越小。两者都是由算法的局部截断误差引起的。向前Euler法倾向于产生随时间增加的数值解(欠阻尼),而采用后退Euler法得到的数值解倾向于过阻尼。因此,在使用这些一阶数值积分算法时必须谨慎。

图5.2给出上述几种数值积分算法的全局误差随时间变化的曲线。注意,向前Euler法和后退Euler法其误差具有相同的幅值但符号相反,这个特性将在本章后面做进一步讨论。放大后的梯形算法和Runge-Kutta算法误差曲线重新画于图5.3中,尽管梯形法是一个二阶的多项式逼近算法,而Runge-Kutta法是一个四阶的Taylor级数展开算法,两者之间的误差仍然是可比的。5.3节将进一步探讨各种数值积分算法误差评估表达式的推导问题。

978-7-111-58306-6-Chapter05-35.jpg

图5.2 例5.1各种数值解的误差

978-7-111-58306-6-Chapter05-36.jpg

图5.3 例5.1梯形法和Runge-Kutta法的误差

当使用诸如梯形法的隐式算法来求解非线性微分方程组时,每个时步上都必须采用迭代算法进行求解。例如,考察如下的非线性微分方程组:

978-7-111-58306-6-Chapter05-37.jpg

采用梯形法对上述方程进行数值积分,得到如下的离散化方程:

978-7-111-58306-6-Chapter05-38.jpg

由于此非线性表达式中隐含了xn+1,必须用数值算法进行求解:

978-7-111-58306-6-Chapter05-39.jpg

式中,k是Newton-Raphson迭代指数,I单位矩阵xn是上一步所得的收敛值。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈