大连理工大学 高等数值分析 常微分方程数值解法-2017

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

i.常微分方程初值问题数值解法

i.1 常微分方程差分法

考虑常微分方程初值问题:求函数()u t 满足

(,), 0du f t u t T dt

=<≤ (i.1a ) 0(0)u u = (i.1b)

其中(,)f t u 是定义在区域G : 0t T ≤≤, u <∞上的连续函数,0u 和T 是给定的常数。我们假设(,)f t u 对u 满足Lipschitz 条件,即存在常数L 使得

121212(,)(,), [0,]; ,(,)f t u f t u L u u t T u u -≤-∀∈∈-∞∞ (i.2) 这一条件保证了(i.1)的解是适定的,即存在,唯一,而且连续依赖于初值0u 。

通常情况下,(i.1)的精确解不可能用简单的解析表达式给出,只能求近似解。本章讨论常微分方程最常用的近似数值解法-差分方法。先来讨论最简单的Euler 法。为此,首先将求解区域[0,]T 离散化为若干个离散点:

0110N N t t t t T -=<<

<<= (i.3) 其中n t hn =,0h >称为步长。

在微积分课程中我们熟知,微商(即导数)是差商的极限。反过来,差商就是微商的近似。在0t t =处,在(i.1a )中用向前差商

10()()u t u t h -代替微商du dt ,便得 10000()()(,())u t u t hf t u t ε=++

如果忽略误差项0ε,再换个记号,用i u 代替()i u t 便得到

1000(,)u u hf t u -=

一般地,我们有

1Euler (,), 0,1,

,1n n n n u u hf t u n N +=+=-方法: (i.4) 从(i.1b) 给出的初始值0u 出发,由上式可以依次算出1,,N t t 上的差分解1,,N u u 。

下面我们用数值积分法重新导出 Euler 法以及其它几种方法。为此,在区间1[,]n n t t +上积分常微分方程(i.1a ),得

1

1()()(,())n n t n n t u t u t f t u t dt ++=+⎰ (i.5)

用各种数值积分公式计算(i.5)中的积分,便导致各种不同的差分法。例如,若用左矩形公式就得到 Euler 法(i.4)。如果用右矩形公式,便得到下面的:

111Euler (,), 0,1,,1n n n n u u h f t u n N +++=+=-隐式方法: (i.6) 类似地,如果用梯形公式,就得到

111Euler [(,)(,)], 0,1,,12n n n n n n h u u f t u f t u n N +++=++=-改进的方法 (i.7) 当(,)f t u 关于u 是非线性函数的时候,不能由(i.6)或 (i.7) 从n u 直接算出1n u +,称这一类方法为隐式,通常采用某种迭代法求解。例如,将一般的隐式方法写成

11(,,)n n n n u F t u u ++= (i.8) 则可以利用如下的迭代法由n u 算出1n u +:

11101(,,

), 0,1, k k n n n n n n u F t u u k u u ++++⎧==⎨=⎩ (i.9)

关于k 的迭代通常只需进行很少几步就可以满足精度要求了。

为了避免对隐式方法进行迭代的麻烦,比如说对于改进的Euler 方法(i .7),可以采用某种预估法近似算出11(,)n n f t u ++,然后再用(i .7)作校正,这就导致所谓预估校正法。下面给出一个例子:

1111111(,)2(,)()2

n n n n n n n n n n n n n u f t u u u hu u f t u h u u u u +-+++++'⎧=⎧⎪⎪'=+⎨⎪⎪⎪'=⎨⎩⎪⎪''=++⎪⎩预估: 校正: (i.10) 这是一个多步法,即计算节点1n t +上的近似值1n u +时,除了用到前一点的近似值n u 之外,还要用到1n u -,甚至可能用到2,n u -。而用前面的各种Euler 法计算节点1n t +上的近似值1n u +时,只用到n u ,这样的方法称之为单步法。

下面给出另一个多步法的例子。在区间2[,]n n t t +上积分(i.1a ),得

2

2()()(,())n n t n n t u t u t f t u t dt ++=+⎰

用Simpson 公式(即把被积函数看作二次函数)近似计算积分,便得到

212Milne (4), 0,1,,23n n n n n h u u f f f n N +++=+++=-法: (i.11) 用多步法(i.10)或(i.11)计算时,必须先用某种单步法由0u 计算出1u ,称为造表头。然后再逐次算出23,,,N u u u 。

一般说来,多步法比Euler 法等简单的单步法精度要高一些。下面我们讨论一类所谓Runge-Kutta 法。他们是单步法,但是其精度可以与多步法比美。最常用的是下面的标准Runge-Kutta 法:

标准Lunge-Kutta 法

⎪⎪⎪⎪⎩

⎪⎪⎪⎪⎨⎧++++=++=++=++==+)22(6),()2,2()2,2(),(432113423121K K K K h u u hK u h t f K hK u h t f K hK u h t f K u t f K n n n n n n n n n n (i.12)

从几何上, Runge-Kutta 法可以粗略地解释为:在区间1[,]n n t t +中选取若干个点(可以重复)1211n k k n t t ττττ-+=<≤≤≤=,仅仅利用在区间1[,]n n t t +内可以得到的所有信息,依

次给出函数(,())f t u t 在这些点上尽可能精确的的近似值12,,

,k K K K ,然后把它们组合起来,尽可能精确地近似计算(i.5)中的积分。下面介绍Runge-Kutta 法的一般构造方式。

选定常数k ,令

1(,)n n K f t u =

22211(,)n n K f t h u K αβ=++

33311322(

,)n n K f t h u K K αββ=+++

1122,11(,)k n k n k k k k k K f t h u K K K αβββ--=++++

+ 11122()n n k k u u h K K K ωωω+=++++ (i.14)

相关文档
最新文档