当前位置:文档之家› 第8章--常微分方程边值问题的数值解法

第8章--常微分方程边值问题的数值解法

第8章--常微分方程边值问题的数值解法
第8章--常微分方程边值问题的数值解法

第8章 常微分方程边值问题的数值解法

8.1 引 言

第7章介绍了求解常微分方程初值问题的常用的数值方法;本章将介绍常微分方程的边值问题的数值方法。

只含边界条件(boundary-value condition)作为定解条件的常微分方程求解问题称为常微分方程的边值问题(boundary-value problem). 为简明起见,我们以二阶边值问题为

则边值问题(8.1.1)有唯一解。

推论 若线性边值问题

()()()()()(),,

(),()y x p x y x q x y x f x a x b y a y b αβ'''=++≤≤??

==?

(8.1.2) 满足

(1) (),()p x q x 和()f x 在[,]a b 上连续; (2) 在[,]a b 上, ()0q x >, 则边值问题(8.1.1)有唯一解。

求边值问题的近似解,有三类基本方法:

(1) 差分法(difference method),也就是用差商代替微分方程及边界条件中的导数,最终化为代数方程求解;

(2) 有限元法(finite element method);

(3) 把边值问题转化为初值问题,然后用求初值问题的方法求解。

8.2 差分法

8.2.1 一类特殊类型二阶线性常微分方程的边值问题的差分法

设二阶线性常微分方程的边值问题为

(8.2.1)(8.2.2)

()()()(),,(),(),

y x q x y x f x a x b y a y b αβ''-=<

==?

其中(),()q x f x 在[,]a b 上连续,且()0q x ≥.

用差分法解微分方程边值问题的过程是:

(i) 把求解区间[,]a b 分成若干个等距或不等距的小区间,称之为单元;

(ii) 构造逼近微分方程边值问题的差分格式. 构造差分格式的方法有差分法, 积分插值法及变分插值法;本节采用差分法构造差分格式;

(iii) 讨论差分解存在的唯一性、收敛性及稳定性;最后求解差分方程. 现在来建立相应于二阶线性常微分方程的边值问题(8.2.1), (8.2.2)的差分方程. ( i ) 把区间[,]I a b =N 等分,即得到区间[,]I a b =的一个网格剖分:

011N N a x x x x b -=<<

<<=,

其中分点(0,1,

,)i x a ih i N =+=,并称之为网格节点(grid nodes);步长b a N

h -=. ( ii ) 将二阶常微分方程(8.2.2)在节点i x 处离散化:在部节点

(1,2,

,1)i x i N =-处用数值微分公式

2(4)

1112

()2()()()(),12

i i i i i i i i y x y x y x h y x y x x h ξξ+---+''=-<< (8.2.3) 代替方程(8.2.2)中()i y x '',得

112

()2()()

()()()()i i i i i i i y x y x y x q x y x f x R x h +--+-=+,

(8.2.4) 其中2(4)

()()12

i i h R x y ξ=. 当h 充分小时,略去式(8.2.4)中的()i R x ,便得到方程(8.2.1)的近似方程

11

2

2i i i i i i y y y q y f h +--+-=,

(8.2.5) 其中(),()i i i i q q x f f x ==, 11,,i i i y y y +-分别是11(),(),()i i i y x y x y x +-的近似值, 称式(8.2.5)为差分方程(difference equation),而()i R x 称为差分方程(8.2.5)逼近方程

(8.2.2)的截断误差(truncation error). 边界条件(8.7.2)写成

0,.

N y y αβ==

(8.2.6)

于是方程(8.2.5), (8.2.6)合在一起就是关于1N +个未知量01,,,N y y y ,以及1N +个

方程式的线性方程组:

22112122

11222111(2),(2),1,2,,1,(2).i i i i i N N N N q h y y h f y q h y y h f i N y q h y h f αβ-+----?-++=-?-++==-??-+=-?

(8.2.7)

这个方程组就称为逼近边值问题(8.2.1), (8.2.2)的差分方程组(system of difference equations)或差分格式(difference scheme),写成矩阵形式

2211122

2222233322222

2

2

111(2)1

1(2)11(2)1

1(2)11(2)N N N N N N y q h h f y q h h f y q h h f y q h h f y q h h f αβ------????-+-????????-+????

????????-+=?????????

?????????-+??????-+-????????????

. (8.2.8)

用第2章介绍的解三对角方程组的追赶法求解差分方程组(8.2.7)或(8.2.8), 其解

01,,,N y y y 称为边值问题(8.2.1), (8.2.2)的差分解(difference solution). 由于

(8.2.5)是用二阶中心差商代替方程(8.2.1)中的二阶微商得到的,所以也称式(8.2.7)为中心差分格式(centered-difference scheme).

( iii ) 讨论差分方程组(8.2.7)或(8.2.8)的解是否收敛到边值问题(8.2.1), (8.2.2)的解,估计误差.

对于差分方程组(8.2.7),我们自然关心它是否有唯一解;此外,当网格无限加密,或当0h →时,差分解i y 是否收敛到微分方程的解()i y x . 为此介绍下列极值原理:

定理8.2.1 (极值原理) 设01,,

,N y y y 是给定的一组不全相等的数,设

11

2

2(),0,1,2,

,i i i i i i i y y y l y q y q i N h +--+=

-≥=.

(8.2.9)

(1) 若()0,1,2,,i l y i N ≥=, 则{}0N

i i y =中非负的最大值只能是0y 或N y ; (2) 若()0,1,2,

,i l y i N ≤=, 则{}0N

i i y =中非正的最小值只能是0y 或N y .

证 只证(1) ()0i l y ≥的情形,而(2) ()0i l y ≤的情形可类似证明. 用反证法. 记{}0max i i N

M y ≤≤=,假设0M ≥, 且在121,,

,N y y y -中达到. 因为i y 不

全相等,所以总可以找到某个00(11)i i N ≤≤-,使0i y M =,而01i y -和01i y +中至少有一个是小于M 的. 此时

000000

0011

2

2

2()2.i i i i i i i i y y y l y q y h M M M q M q M h

+--+=

--+<-=-

因为00,0i q M ≥≥,所以0()0i l y <, 这与假设矛盾,故M 只能是0y 或N y . 证毕!

推论 差分方程组(8.2.7)或(8.2.8)的解存在且唯一. 证明 只要证明齐次方程组

112

02()0,0,1,2,,1,

0,0

i i i i i i i N y y y l y q y q i N h y y +--+?

=-=≥=-??

?==? (8.2.10)

只有零解就可以了. 由定理8.7.1知,上述齐次方程组的解01,,

,N y y y 的非负的最大值

和非正的最小值只能是0y 或N y . 而00,0N y y ==,于是0,1,2,

,.i y i N == 证毕!

利用定理8.2.1还可以证明差分解的收敛性及误差估计. 这里只给出结果: 定理8.2.2 设i y 是差分方程组(8.2.7)的解,而()i y x 是边值问题(8.2.1), (8.2.2)的解()y x 在i x 上的值,其中0,1,

,i N =. 则有

2

24()(),96i i i M h y x y b a ε=-≤-

(8.2.11)

其中(4)

4max ()a x b

M y

x ≤≤=.

显然当0h →时,()0i i i y x y ε=-→. 这表明当0h →时,差分方程组(8.2.7)或(8.2.8)的解收敛到原边值问题(8.7.1), (8.7.2)的解.

例8.2.1 取步长0.1h =,用差分法解边值问题

43,

01,

(0)(1)0,

y y x x y y ''-=≤≤??

==?

并将结果与精确解(

)()2222()3434x

x y x e

e e e x --=---进行比较.

解 因为110N h ==,()4,()3q x f x x ==, 由式(8.2.7)得差分格式

221222

1122

89(240.1)30.10.1,(240.1)30.1,2,3,,8,(240.1)30.10.9,

i i i i y y y y y x i y y -+?-+?+=???-+?+=?=??-+?=???

0100y y ==, 00.1,1,2,

,9i x ih i i =+==, 其结果列于表8.2.1.

从表8.2.1可以看出, 差分方法的计算结果的精度还是比较高的. 若要得到更精确的数值解,可用缩小步长h 的方法来实现.

8.2.2 一般二阶线性常微分方程边值问题的差分法

对一般的二阶微分方程边值问题

1212

()()()()()(),,()(),

()(),

y x p x y x q x y x f x a x b y a y a y b y b αααβββ'''++=<

'+=??'+=? (8.2.12) 假定其解存在唯一.

为求解的近似值,类似于前面的做法,

( i ) 把区间[,]I a b =N 等分,即得到区间[,]I a b =的一个网格剖分:

011N N a x x x x b -=<<

<<=,

其中分点(0,1,

,)i x a ih i N =+=,步长b a N

h -=. ( ii ) 对式(8.2.12)中的二阶导数仍用数值微分公式

2(4)

1112()2()()()(),12i i i i i i i i

y x y x y x h y x y x x h ξξ+---+''=-<<

代替,而对一阶导数,为了保证略去的逼近误差为2

()O h ,则用3点数值微分公式;另外为了保证插,在2个端点所用的3点数值微分公式与网格点所用的公式不同,即

2

1112012000022

212()()()(),,1,2,,1,263()4()()()(),,23()4()3()()(),.23i i i i i i i N N N N N N N N y x y x h y x y x x i N h y x y x y x h y x y x x h y x y x y x h y x y x x h ξξξξξξ+-----?-''''=-<<=-??

-+-?

''''=

+<

?-+''''=

+<

(8.2.13)

略去误差,并用()i y x 的近似值i y 代替()i y x ,(),(),()i i i i i i p p x q q x f f x ===,便得到差分方程组

1

111221*********

(2)(),1,2,,1,

2(34),

2(43),2i i i i i i i i i N N N N p y y y y y q y f i N h h

y y y y h y y y y h αααβββ-++---?-++-+==-??

?

+-+-=??

?+-+=??

(8.2.14)

其中(),(),(),1,2,,1i i i i i i q q x p p x f f x i N ====-, i y 是()i y x 的近似值. 整理

120212222

1122

2121(23)42,(2)2(2)(2)2,1,2,,1,4(32)2.

i i i i i i i N N N h y y y h hp y h q y hp y h f i N y y h y h αααααβββββ-+---+-=??---++==-??-++=? (8.2.15)

解差分方程组(8.2.15),便得边值问题(8.2.12)的差分解01,,,N y y y .

特别地, 若12121,0,1,0ααββ====,则式(8.2.12)中的边界条件是第一类边值

条件:(),();y a y b αβ==此时方程组(7.7.16)为

2211121122

11221211112(2)(2)2(2),

(2)2(2)(2)2,2,3,,2,(2)2(2)2(2).i i i i i i i N N N N N N h q y hp y h f hp hp y h q y hp y h f i N hp y h q y h f hp αβ-+------?--++=--?---++==-??---=-+?

(8.2.16)

方程组(8.2.16)是三对角方程组,用第2章介绍的解三对角方程组的追赶法求解差分方程组(8.2.16),便得边值问题(8.2.12)的差分解01,,

,N y y y .

( iii ) 讨论差分方程组(8.2.16)的解是否收敛到微分方程的解,估计误差. 这里就不再详细介绍.

例8.2.2 取步长/16h π=,用差分法求下列边值问题的近似解,并将结果与精确解进行比较

.

精确解是1

()(sin 3cos )10

y x x x =-

+. 解 因为(20)8N h π=-=,()1,()2,()cos p x q x f x x =-=-=, 由式(8.2.17)得差分格式

()()()()()()()()()()()()()21222

112

2

2122216(2)216(1)216cos 16216(1)(0.3),216(1)2216(2)216(1)216cos 16,2,3,,6,216(1)2216(2)216cos 7i i i N N y y

y y y i i y y πππππππππππππ-+--??--?-++?-?????

?=--?-?-??????-?---?-++?-??????????==??-?---?-??????=()()16216(1)(0.1),ππ???

?

???????

?-+?-?-?????

080.3,0.1y y =-=-, 00.1,1,2,

,9i x ih i i =+==, 其结果列于表8.2.2.

8.3 有限元法

有限元法(finite element method)是求解微分方程定解问题的有效方法之一,它特别适用在几何、物理上比较复杂的问题. 有限元法首先成功地应用于结构力学和固体力学,以后又应用于流体力学、物理学和其他工程科学. 为简明起见,本节以线性两点边值问题为例介绍有限元法.

考虑线性两点边值问题

()(8.3.1)(8.3.2)

()()()()(),,(),(),

Ly p x y x q x y x f x a x b y a y b αβ?''?=-+=≤≤?==??

其中1

()0,()0,C [,]p x q x p a b >≥∈, ,C[,]q f a b ∈.

此微分方程描述了长度为b a -的可变交叉截面(表示为()q x )的横梁在应力()p x 和

()f x 下的偏差()y x .

8.3.1 等价性定理

记{

}

2

2

1C [,]()C [,],(),()a b y y y x a b y a y b αβ==∈==, 引进积分

()2

2()()[()]

()()2()()d b

a

I y p x y x q x y x f x y x x '=+-?

. (8.3.3)

任取2

1()C [,]y y x a b =∈,就有一个积分值()I y 与之对应,因此()I y 是一个泛函

(functional),即函数的函数. 因为这里是,y y '的二次函数,因此称()I y 为二次泛函.

对泛函(8.3.3)有如下变分问题(variation problem):求函数2

1C [,]y a b ∈,使得对任意2

1C [,]y a b ∈, 均有

()()I y I y ≥, (8.3.4)

即()I y 在y 处达到极小, 并称y 为变分问题(8.3.4)的解.

可以证明:

定理8.3.1(等价性定理) y 是边值问题(8.3.1), (8.3.2)的解的充分必要条件是y 使泛函()I y 在21C [,]a b 上达到极小,即y 是变分问题(8.3.4)在2

1C [,]a b 上的解.

证 (充分性) 设21C [,]y a b ∈是变分问题()I y 的解;即y 使泛函()I y 在2

1C [,]a b 上达到极小,证明y 必是边值问题(8.3.1), (8.3.2)的解.

设()x η是2

C [,]a b 任意一个满足()()0a b ηη==的函数,则函数

2

1()()()C [,]y x y x x a b αη=+∈,

其中α为参数. 因为y 使得()I y 达到极小,所以()()I y I y αη+≥,即积分

()2

2()()[()()]

()[()()]2()[()()]b

a

I y p x y x x q x y x x f x y x x dx

αηαηαηαη''+=+++-+?

作为α的函数,在0α=处取极小值()I y ,故

d

()0d I y ααηα=+=. (8.3.5) 计算上式,得

()()()()

()0

2

2

(8.d

()d d ()[()()]()[()()]2()[()()]d d 2()[()()]()2()[()()]()2()()d 2()()()()()()()()d .

b

a

b a

b

a

I y p x y x x q x y x x f x y x x x p x y x x x q x y x x x f x x x p x y x x q x y x x f x x x ααααηααηαηαηα

αηηαηηηηηη===+''=+++-+'''=+++-''=+-???

3.6)

利用分部积分法计算积分

[][]()()()d ()()d ()

()()()()()()d ()()()d ,

b

b

a

a

b b

a a

b

a

p x y x x x p x y x x p x y x x x p x y x x x p x y x x ηηηηη'''='''=-''=-?

???

代入式(8.3.6),得

()0

(8.3.7)d

()2()()()()()()d 0.

d b a I y p x y x q x y x f x x x ααηηα'=????'+=-+-=?

因为()x η是任意函数,所以必有

()()()()()()0p x y x q x y x f x ''-+-≡. (8.3.8)

否则,若在[,]a b 上某点0x 处有

()00000()()()()()0p x y x q x y x f x ''-+-≠,

不妨设

()00000()()()()()0p x y x q x y x f x ''-+->,

则由函数的连续性知,在包含0x 的某一区间00[,]a b 上有

()()()()()()0p x y x q x y x f x ''-+->.

0022

00000,

[,]\[,],()()(),.

x a b a b x x a x b a x b η∈??=?--≤≤?? 显然2

()C [,]x a b η∈,且()()0a b ηη==,但

()()()()()()()d b

a p x y x q x y x f x x x η??''-+-????

?

()0

0()()()()()()d 0b a p x y x q x y x f x x x η??''=-+->????

?,

这与式(8.3.7)矛盾. 于是式(8.3.8)成立,即变分问题(8.3.4)的解y 满足微分方程(8.3.1), 且(),()y a y b αβ==故它是边值问题(8.3.1), (8.3.2)的解.

(必要性) 设()y y x =是边值问题(8.3.1), (8.3.2)的解,证明y 是变分问题(8.3.4)的解;即:y 使泛函()I y 在2

1C [,]a b 上达到极小.

因为()y y x =满足方程(8.3.1),所以()()()()()()0p x y x q x y x f x ''-+≡.

设任意2

1()C [,]y y x a b =∈,则函数()()()x y x y x η=-满足条件()()0a b ηη==,

且2

()C [,]x a b η∈. 于是

()()[]()2

2

2

2

2

2

()()()()

()[()()]()[()()]2()[()()]d ()[()]()[()]2()()d 2()()()()()()()()d ()[()]()[()]d b

a

b

a b

a

a

I y I y I y I y p x y x x q x y x x f x y x x x p x y x q x y x f x y x x

p x y x x q x y x x f x x x p x x q x x x

ηηηηηηηηη-=+-''=+++-+'-+-''=+-++?

??()()()222

22()()()()()()d ()[()]()[()]d ()[()]

()[()]d .

b

b b

a a b

a

p x y x q x y x f x x x p x x q x x x

p x x q x x x ηηηηη??'''=--+++????

'=+????

因为()0,()0p x q x >≥,所以当()0x η≠时,

()2

2()[()]

()[()]d 0b

a

p x x q x x x ηη'+>?, 即

()()0I y I y ->.

只有当()0x η≡时,()()0I y I y -=. 这说明y 使泛函()I y 在2

1C [,]a b 上达到极小. 证毕!

定理8.3.2 边值问题(8.3.1), (8.3.2)存在唯一解.

证明 用反证法. 若12(),()y x y x 都是边值问题(8.3.1), (8.3.2)的解,且不相等,则由定理8.3.1知,它们都使泛函()I y 在2

1C [,]a b 上达到极小,因而

12()()I y I y > 且 21()()I y I y >,

矛盾!因此边值问题(8.3.1), (8.3.2)的解是唯一的.

由边值问题解的唯一性,不难推出边值问题(8.3.1), (8.3.2)解的存在性(留给读者自行推导).

8.3.2 有限元法

等价性定理说明,边值问题(8.3.1), (8.3.2)的解可化为变分问题(8.3.4)的求解问题. 有限元法就是求变分问题近似解的一种有效方法. 下面给出其解题过程:

第1步 对求解区间进行网格剖分

01,i n a x x x x b =<<<<<=

区间1[,]i i i I x x -=称为单元,长度1(1,2,

,)i i i h x x i n -=-=称为步长,1max i i n

h h ≤≤=. 若

(1,2,

,)i h h i n ==,则称上述网格剖分为均匀剖分.

给定剖分后,泛函(8.3.3)可以写成

()2

2()()[()]

()()2()()d b

a

I y p x y x q x y x f x y x x '=+-?

()1

2

2

1

1

()[()]

()()2()()d i

i n

n

x i x i i p x y x q x y x f x y x x

S -=='=+-∑∑?

. (8.3.9)

第2步 构造试探函数空间。为了计算积分(8.3.9),最简单的近似方法是将分段线性函数的集合作为试探函数空间。设01,,,n y y y 分别是边值问题(8.3.1), (8.3.2)的解()

y x 在节点01,,

,n x x x 处的值,用分段线性插值

1

11(),[,].i i i i i i i i i

x x x x y y x y y x I x x h h -----==

+∈= (8.3.10) 近似1()[,]i i i y x x I x x -∈=,

,并称式(8.3.10)为单元形状函数(element shape function). 为了将线性插值(8.3.10)标准化,令

1

i i

x x t h --=

, 则将1[,]i i i I x x -=变到t 轴上的单元[0,1]. 记01()1,()N t t N t t =-=,则式(8.3.10)可写成

011()(),[0,1].i i y N t y N t y t -=+∈ (8.3.11)

第3步 建立有限元方程组. 将式(8.3.10)代入泛函(8.3.9),有

()1

1

2

2

1

1

()()()[()]()[()]d 2()()d i

i

i i n

n

x x x x i i I y I y p x y x q x y x x f x y x x --=='≈=+-∑∑?

?

.

由式(8.3.11)知

2

1

2111011011

10110

11

122111

1

1

1()

()()()[()()]d 2()[()()]d ()()(1)2()({n

i i i i i i i i i i i n

i i i i i i n

i i i i i i i i i i i i y y I y p x th h q x th N t y N t y t

h h f x th N t y N t y t

h p x th h q x th t y h p x th h q x ----=--=----=--??-=++++ ???

-++??=+++-??+-++∑?∑?∑?11122

11)(1)()()d }i i i i i i i i i i i th t t y y h p x th h q x th t y t

-----??+-????++++??

1

110

1

2()[(1)]d .n

i i i i i i h f x th t y ty t --=-+-+∑? (8.3.12)

式(8.3.12)右端第1个求和号的第i 项(对应第i 个单元)是关于1,i i y y -的二次型,可以写成

()T ()()()i i i Y K Y , (8.3.13)

其中

()T 1(,)i i i y y -=Y ,()()

1,1

1,()

()(),1,i i i i i i

i i i i i i i K K K K -

---??= ? ???

K , (8.3.14) ()i K 称为单元刚度矩阵(element stiffness matrix),

1()121,11101()12

,1101

()()11,,1110()()(1)d ,

()()d ,

()()(1)d .i i i i

i i i i i i i i i i i i i i i i i i i i i i i i i i K h p x th h q x th t t K h p x th h q x th t t K K h p x th h q x th t t t -------------???=+++-??????=+++???????==-+++-???

??? (8.3.15) 而式(8.3.12)的第2个求和号的第i 项可以写成

()T ()()i i b Y (8.3.16)

其中

()()()T

12(,)i i i b b =b ,()T 1(,)i i i y y -=Y ,

1

1

()()1

12

10

()(1)d ,()d .i i i i i i i i b h f x th t t b h f x th t t --=+-=+??

于是式(8.3.12)中求和号的项可以写成

()T ()()()T ()()2()i i i i i i S =-Y K Y b Y . (8.3.17)

再令T 01(,,

,)n y y y =Y 及2(1)n ?+矩阵

()1001000,0

0010

0i i i -??=

???

列列

C 则()

()i i =Y

C Y .

于是式(8.3.17)又可写成

()T ()()()T ()()()2()()i i i i i i S =-C Y K C Y b C Y

(

)

T

T

()T

()

()

()T

()()2()i i i i i =-Y C K C Y C b

Y . (8.3.18)

把式(8.3.18)代入式(8.3.12)右端求和号,得

()T T

()T ()()()T ()111()()2()n

n n i i i i i i i i i I y S ===????==- ? ?????

∑∑∑Y C K C Y C b Y . (8.3.19)

()

()

1,1

1,()T

()

()

()()1

1,1,0

000000000

000000()00000000000

0i i n

n i i i i

i i i i i i i i i i i K K K K ---==-??

?????????

?==??????????????

∑∑K C K C

(1)

(1)0001(1)(1)(2)(2)101111

12(2)(2)(3)(3)21

2222

23(3)(3)(4)(4)

32

3333

34

(1)(1)()

()

1,2

1,11,1

1,()(),1

,n n n n n n n n n n n n n n n n n n K K K K K K K K K K K K K K K K K K K K ----------????+????+??=+??????+?????

?

, (8.3.20)

()T ()()()

T 121

1

1,()(0,

,0,,,0,

,0)n n

i i i i i i i i

b b ==-==∑∑b C b

(1)(1)(2)(2)(3)(3)

(4)(1)()()T

1212121212(,,,,,,)n n n b b b b b b b b b b -=++++, (8.3.21)

则式(8.3.19)化为

T T ()2.I y =-Y KY b Y (8.3.22)

并称K 为总刚度矩阵(total stiffness matrix),称b 为右端向量.

因为()y x 是使()I y 取极小值的函数,所求的01,,,n y y y 自然使式(8.3.22)的右边取

极小值,所以应有

T T d

(2)0,0,1,2,,d i

i n y -==Y KY b Y . (8.3.23)

记T 12(),(,,

,)ij n n n K b b b ?==K b , 则式(8.8.23)为

0000

d

2d 2n n n r j j r r r r j r i

n n

r i r i j j i

r j K y y b y y K y K y b =====????

-??

???????=+-∑∑∑∑∑

020,1,2,,1,n ir r i r K y b i n =??

=-==- ???

,0,1,

,,n

ir

r i r K

y b i n ===∑ (8.3.24)

得方程组

=KY b . (8.3.25)

因为0,n y y αβ==是已知的,不能任意选取,所以不能要求式(8.3.23)对0,n y y 也成立. 因此方程组(8.3.24)或(8.3.25)中应当去掉首末2个方程,并把其他方程中含有的0,n y y 改为已知量,所得方程组就是未知量121,,

,n y y y -满足的代数方程组

(1)(2)

(2)1111112(2)(2)(3)(3)

2212222

23

(2)(2)(1)

(1)

22,32,22,2

2,1(1)

(1)()11,2

1,11,1n n n n n n n n n n n n n n n n n n n n n n n y K K K y K K K K y K K K K y K K K ----------------------??+??

????+????????????+????????+??

?

? (1)(2)(1)

2110(2)(3)

21(2)(1)

21

(1)()()2

11,n n n n n n n b b K b b b b b b K αβ----??+-??+??

?

?=??+????

+-??. (8.3.26) 方程组(8.3.25)或(8.3.26)称为有限元方程组(finite element system of equations).

用第2章介绍的解三对角方程组的追赶法求解有限元方程组(8.3.26),可解出

121,,,n y y y -,即得变分问题(8.3.4)的近似解,也就是边值问题(8.3.1), (8.3.2)解的近

似值. 这种方法称为有限单元法(finite element method)或有限元法.

例8.3.1 用有限元法求下列边值问题的近似解,并将结果与精确解进行比较.

2(())4()481,01,

(0)(1)0,

xy x y x x x x y y ''?-+=-+≤≤?

==? 取0.2h =,精确解是2

()y x x x =-.

解 因为15N h ==,2

(),()4,()481p x x q x f x x x ===-+, 由式(8.3.26)得有限元方程组

12

123

234342.53333 1.366670.082667,1.36667 4.53333 2.366670.306667,2.36667 6.53333 3.366670.466667,3.366678.533330.562667.y y y y y y y y y y -=-??-+-=-??

-+-=-?

?-+=-?

其结果列于表8.3.1.

上面虽然是对边值问题(8.3.1), (8.3.2)介绍的有限元解法,但其解题步骤对一般的微分方程定解问题也是适用的.

对所给微分方程定解问题,首先找出相应微分方程的变分形式,然后进行下列步骤: 第1步 对定义区域(或定义区间)进行网格剖分, 将定义区域(或定义区间)剖分为若干个小单元(一维是区间;多维是区域,如矩形、三角形等);

第2步 构造试探空间; 即选择适当的插值函数类.

第3步 建立有限元方程组. 计算单元刚度矩阵及右端向量,再形成总刚度矩阵及总右端项,写出有限元方程组;结合定解条件,求解有限元方程组.

注 从形式上看,用有限元法解微分方程定解问题很繁,但是有限元法的求解步骤规,便于在计算机上实现,并且总刚度矩阵是三对角对称正定矩阵,因此有限元方程组可用第2章介绍的解三对角方程组的追赶法求解. 有限元法最主要的优点是可以处理相当复杂的区域上的边值问题。

8.4 打靶法

解常微分方程边值问题的打靶法(shooting method),也称为尝试法,其基本思想是把边值问题转化为初值问题来解:首先作出一些只满足一端边值条件的解,然后再从这些解中找出适合另一端边值条件的解. 下面以二阶常微分方程带第一类边界条件的边值问题

(8.4.1)(8.4.2)

()(,(),()),

,(),().

y x f x y x y x a x b y a y b αβ'''=<

==?

为例介绍常微分方程边值问题的打靶法.

7.6节曾介绍过二阶常微分方程初值问题(7.6.10)

()(,(),()),,

(),(),

y t f t y t y t a t b y a y a αα'''=<≤??

''==?

的求解方法. 将上式中的t 改为x ,α'改为s ,得

()(,(),()),,

(),(),

y x f x y x y x a x b y a y a s α'''=<≤??

'==? (8.4.3)

设初值问题(8.4.3)的解为1()y x ,显然1()y x 依赖于s ,即11()(,)y x y x s =. 为了求解边值问题(8.4.1), (8.4.2),必须求s s =,使之满足11()(,)y b y b s β==.

下面介绍2种方法来求s .

方法1 根据实际问题情况选一个1s ,解初值问题

1

(,,),

,(),(),y f x y y a x b y a y a s α'''=<≤??

'==? (8.4.4) 得到的解仍记为1()y x .

若1()y b β=或1()y b βε-<(ε为事先给定的精度),则1()y x 就是边值问题(8.4.1), (8.4.2)的解.

否则,根据11()y b β=与β的误差,将1s 修改为2s ;例如取211

s s β

β=, 再解初值问题

2()(,(),()),,

(),(),

y x f x y x y x a x b y a y a s α'''=<≤??

'==? (8.4.5)

得到解2()y x .

若22()y b β=满足2ββ=或2ββε-<,则2()y x 就是边值问题(8.4.1), (8.4.2)

的解.

否则,再将2s 适当修改为3s ; 例如可用1122(,),(,)s s ββ作线性插值求3s :

21

31121

()s s s s ββββ-=+

--,

然后解初值问题

3()(,(),()),,

(),(),

y x f x y x y x a x b y a y a s α'''=<≤??

'==? (8.4.6)

的解. 如此继续下去,直到达到精度要求为止.

方法2 求s 另一种方法是求函数()(,)F s y b s β=-的一个零点s . 对于每一个自变量s ,通过解初值问题(8.4.4),可解出(,)y x s . 计算

()(,)F s y b s β=-, (8.4.7)

然后采用第3章介绍的求方程根的方法求()F s 的零点.

首先寻找(1)

(2)

,s s

,使(1)(2)

()0,()0F s F s

<>,则在区间(1)(2)(,)s s 或(2)(1)(,)s s 至

少有()F s 的一个零点. 然后可用二分法求s . 也可用Newton 迭代公式

1()

()

k k k k F s s s F s +=-

' 求s 的近似值.

几何解释:微分方程边值问题(8.4.1), (8.4.2)的解()y x 是一条通过

(,()),(,())A a y a B b y b 两点的曲线(如图8.4.1). 初值问题(8.4.4)的解1(,)y x s 是一条

通过点(,())A a y a 、斜率为1()y a s '=的曲线(如图8.4.1). 初值问题(8.4.5)的解2(,)y x s 是一条通过点(,())A a y a 、斜率为2()y a s '=的曲线(如图8.4.1). 这有点象射击者从定点

A 向目标

B 射击一样. 根据经验以某一角度(斜率为1s )试射一次. 如果与目标相差太大,

调整射击角度(斜率为2s ),再进行射击. 如此继续进行下去,直到击中目标,或击中的点与B 的误差在允许的围之。

图8.4.1

参考文献[1]提供的资料还讨论了选择初始值()y a s =的重要性,并介绍了多重打靶法,这里就不作详细介绍,有兴趣的读者可参看相关资料.

8.5 算法程序

8.5.1 用差分法解二阶线性常微分方程的边值问题

%用差分法解二阶线性常微分方程的边值问题

%[a,b]是区间, Step 是步长, Alpha, Beta 是初值 % f, q 分别是式(8.2.1)中的f (x ), q (x )

function Y = DiffMethod(f, q, a, b, Step, Alpha, Beta) N = (b-a) / Step; X = a : Step : b; A = zeros( N-1 ); for i = 1 : N-1

A(i,i) = -1 * ( 2+feval(q, X(i+1)) * Step^2 ); if i ~= N-1

A(i,i+1) = 1; A(i+1,i) = 1; end end

B(1) = Step^2 * feval(f, X(2)) - Alpha; B(2:N-2) = Step^2 * feval(f, X(3:N-1)); B(N-1) = Step^2 * feval(f, X(N)) - Beta; B = B';

[L,U] = lu( A ); Y = U \ ( L \ B ) ; for i = 1 : length(Y)

sprintf('%10.7f',Y(i)) end end

例8.5.1 取0.1h =,用差分法求下列边值问题的近似解

()4(()),01,

(0)0,(1) 2.y x y x x x y y ''=-≤≤??

==?

解 在MATLAB 命令窗口输入:

f = inline('-4.*x'); q= inline('4'); DiffMethod(f, q, 0, 1, 0.1, 0, 2)

回车,可的结果。

8.5.2 用差分法解一般二阶常微分方程的边值问题

%用差分法解一般二阶常微分方程的边值问题

% [a,b]是区间, Step 是步长, Alpha, Beta 是初值 % f, p, q 分别是式(8.2.12)中的f (x ), p (x ), q (x )

function Y = DiffMethod_2(f, p, q, a, b, Step, Alpha, Beta) N = (b-a) / Step; X = a : Step : b; A = zeros( N-1 );

A(1, 1) = -2 * ( 2 - Step^2 * feval(p, X(2)) ); A(1,2) = 2 + Step * feval(f, X(3)); for i = 2 : N-2

A(i,i) = -2 * ( 2 - feval(p, X(i+1)) * Step^2 ); A(i,i-1)= 2 - Step * feval(f, X(i+1)); A(i-1,i) = 2 + Step * feval(f, X(i+1)); end

A(N-1,N-2) = 2 - Step * feval(f, X(N));

A(N-1,N-1) = -2 * ( 2 - feval(p, X(N)) * Step^2 );

B(1) = 2*Step^2 * feval(q, X(2)) - ( 2 - Step * feval(f, X(2)) ) * Alpha; B(2:N-2) = 2 * Step^2 * feval(q, X(3:N-1));

B(N-1) = 2*Step^2 * feval(q, X(N)) - ( 2 + Step * feval(f, X(N)) ) * Beta; B = B';

[L,U] = lu( A ); Y = U \ ( L \ B ) ; for i = 1 : length(Y)

sprintf('%10.7f',Y(i)) end end

例8.5.2 取/16h π=,用差分法求下列边值问题的近似解

解 在MATLAB 命令窗口输入:

f = inline('cos(x)'); p = inline('-1'); q = inline('-2'); DiffMethod_2(f, p, q, 0, pi/2, pi/16, -0.3, -0.1) 回车,可得结果。

8.5.3 用有限元法解二阶常微分方程的边值问题

%用有限元法解二阶常微分方程的边值问题 %[a,b]是区间, h 是步长, Alpha, Beta 是初值

% f, p, q 分别是式(8.3.1)中的f (x ), p (x ), q (x )

function Y = FiniElem(f, p, q, a , b, Step, Alpha, Beta) N = length(Step) - 1; X(1) = a;

for i = 1 : N+1

X(i+1) = X(i) + Step(i); end syms t;

ff = -1/Step(N+1) * feval(f, X(N)+t*Step(N+1)) + ...

Step(N+1)* feval(p, X(N)+t*Step(N+1)) * (1-t)*t;

Knnn = int(ff, t, 0, 1);

syms t;

ff = -1/Step(2) * feval(f, X(1)+t*Step(2)) + ...

Step(2)*feval(p, X(1)+t*Step(2))*(1-t)*t;

K101 = int(ff, t, 0, 1);

for i = 2 : N

syms t;

ff = Step(i+1) * feval(q, X(i)+t*Step(i+1)) * (1-t);

B1(i) = int(ff, t, 0, 1);

end

for i = 1 : N-1

syms t;

ff = Step(i+1) * feval(q, X(i)+t*Step(i+1)) * t;

B2(i) = int(ff, t, 0, 1);

end

B(1) = B2(1) + B1(2) - Alpha*K101;

B(N-1) = B2(N-1) + B1(N) - Beta*Knnn;

for i = 2: N-2

B(i) = B2(i) + B1(i+1);

end

B=B';

A=zeros(N-1);

for i = 1 : N-1

syms t;

ff = 1/Step(i+1) * feval(f, X(i)+t*Step(i+1)) + ...

Step(i+1)* feval(p, X(i)+t*Step(i+1)) * t^2;

K1 = int(ff, t, 0, 1);

syms t;

ff = 1/Step(i+2) * feval(f, X(i+1)+t*Step(i+2)) + ...

Step(i+2) *feval(p, X(i+1)+t*Step(i+2)) * (1-t)^2;

K2 = int(ff, t, 0, 1);

A(i,i) = eval(K1+K2);

end

for i = 1 : N-2

syms t;

ff = -1/Step(i+2) *feval(f, X(i+1)+t*Step(i+2)) + ...

Step(i+2) * feval(p, X(i+1)+t*Step(i+2)) * (1-t) * t; K1 = int(ff, t, 0, 1);

A(i,i+1) = eval(K1);

A(i+1,i) = eval(K1);

end

[L,U]=lu(A);

Y = eval( U \ (L\B) );

小 结

本章介绍了解微分方程边值问题的差分方法、有限元法和打靶法。前两种方法是解微分方程边值问题最常用的方法,它们最终得到的方程组往往是三对角方程组,可通过追赶法来解。有限元法最主要的优点是可以处理相当复杂的区域上的边值问题。而且差分方法和有限元法还是求解偏微分方程的两类重要的方法.

习 题 八

1. 用差分法求下列边值问题的近似解,并将结果与精确解进行比较。 (1) ()4(),01,

(0)0,(1)2,

y x y x x y y ''=-≤≤??

==?

取0.1h =,精确解是222

2

()x x

e e y x x e e

---=+-.

(2) ()2()(),02,

(0)0,(2)4,

x y x y x y x xe x x y y '''?=-+-≤≤?==-?

取0.2h =,精确解是315()22

63

x x

x y x x e xe e x =

-+--. 2. 用有限元法求下列边值问题的近似解,并将结果与精确解进行比较。

取0.2h =,精确解是()()()

1132234()cos cos y x x x x πππ=-+.

相关主题
文本预览
相关文档 最新文档