第八章 常微分方程数值解

第八章  常微分方程数值解
第八章  常微分方程数值解

156 第八章 常微分方程数值解

由常微分方程理论可知,我们只能求一些特殊类型的常微分方程。而实际上许多常微分方

本章主要讨论一阶常微分方程的初值问题:

()()?????==0

,y a y y x f dx dy

b

x a ≤≤ (8

-1)

从理论上讲只要方程中的()y x f ,连续且关于y 满足李普希兹(Lipschitz )条件,即存在常数L ,使

()()2

1

2

1

,,y y L y x f y x f -≤-

则常微分方程存在唯一解)(x y y =。 微分方程数值解:就是求微分方程的解()x y 在一系列离散节点

b x x x x a n

n =<<<<=-1

1

157

处的近似值i

y (i=1,2,…,n ) i

i i

x x h -=+1

称为由i

x 到1

+i x 的步长,通常取为常数h 。

求数值解,首先将微分方程离散化,常用方法有: (1) 用差商代替微

若用向前差商代替微商,即

()

()

()()()

i i i i i x y x f x y h

x y x y ,1='≈-+ (i=1,2,…,

n )

则得()1

+i x y ()()()i

i

i

x y x hf x y ,+≈ 即()i

i

i

i y x hf y y ,1

+=+

(2) 数值积分法

利用数值积分法左矩形公式

()()

i i x y x y -+1=()()()

i i x x y x hf dx x y x f i i

,,1

≈?

+

可得同样算法()

i i i i y x hf y y

,1

+=+ (3)

用泰勒(Taylor )

公式

()()h x y x y i i +=+1()()i i x y h x y '+≈()()()i i i x y x hf x y ,+=

得离散化计算公式()

i i i i y x hf y y

,1

+=+

158

§1 欧拉(Euler )方法

1.1欧拉方法

对一阶微分方程(8—1),等分区间[]b a ,为n 份,b x x x x a n

n =<<<<=-1

1

ih

a x i +=

n

a b h -=

n

i ,2,1=

由以上讨论可知,无论用一阶向前差商,还是用数值积分法左矩形公式,或者用泰勒公离散化计算公式

()i

i

i

i y x hf y y ,1

+=+

代入初值则得到数值算法:

()()?

?

?=+=+a y y y x hf y y i i i i 01, (i=1,2,…,

n -1) (8-2)

称其为欧拉方法。

几何上欧拉方法就是用一条折线近似表示曲线()x y y =。(如图):

159

1.2欧拉方法的误差估计

定义1 局部截断误差:假设)(i

i

x y y =为准确值,用某数值算法计算1

+i y 产生的误差

160 ()1

11+++-=i i i y x y R ,称为该数值算法的局部截

断误差。

定义2 整体截断误差:准确解)(i

x y 与数值解i

y 的误差,()i i

i

y x y e -=。

设()x y 有二阶导数,由泰勒公式有:

()()

h x y x y i

i +=+1

=()()()i i i y h x y h x y ξ''+'+22

1

=

()()i i i i y h y x hf y ξ''++22

1

,

所以

()1

11+++-=i i i y x y R =

)(2

12

i y h ξ'',

1+<

(8-3)

当h 充分小时,欧拉方法的局部截断误差

与h 2

是同阶无穷小,称其为一阶方法。 定义 3 如果一数值解法的局部截断误差为)(1

+p h O ,则称该算法为p 阶算法。

1.3 改进的欧拉方法

由微分方程数值解的三种基本构造方法知,若取不同的差商(如向后),不同的

161

数值积分公式(如梯形公式),以及泰勒公式取前三项、四项等可得不同的算法。

如果用梯形公式计算积分:

()()()()()()[]1

1

,,2

,1+++≈?+i i i

i

x x x y x f x y x f h

dx x y x f i i

()()[]111,,2

+++++

=i i i i i i y x f y x f h

y y (8

-4) 且

()111+++-=i i i y x y R

=

()ξy h '''-

3

12

1 (8

-5)

由于此方程为1

+i y 的隐式方程,不易求解。一般将其与欧拉方法联合使用。

可得算法 ()()()()()

(

)[]

??

?

??++=+=+++++k i i i i i k i i i i i y x f y x f h y y y x hf y y 111101,,2, (8-6)

(k=0,1,2,…;i=1,2,…,

n -1)

实际计算中,当h 比较小时,常取一次迭代后的近似值()11

+i y 为1

+i y ,于是有改进的欧拉方

162 法

??

???++=+=++++)]~,(),([2),(~1111i i i i i i i i i i y x f y x f h y y y x hf y y

(i=0,1,2,…,n -1)

例 1 用欧拉方法和改进的欧拉

方法求微分方程

()[]7.0,0,1

03

22∈?????==x y xy

dx dy

的数值解(取h=0.1)。

解:由欧拉方法(8-2),得数值计算公式

1

+i y =i

y +0.1×

2

3

2

i

i y x 计算结果如表8-1 由改进的欧拉方法(8-6),

得数值计算公式

??

???++=+=++++]

~32

32[05.03

21.0~2112121i i i i i i i i i i y x y x y y y x y y

163

计算结果如表8-2

表8-1

x i 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 y i 1.0000 1.0069 1.0208 1.0391 1.0628 1.0923 1.1269 1.1643 误差 0.0000 0.0037 0.0077 0.0993 0.0120 0.0151 0.0189 0.0222

表8-2

x i 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 y i 1.0000 1.0033 1.0132 1.0292 1.0506 1.0773 1.1079 1.1422 误差 0.0000 0.0000 0.0000 0.0002 0.0020 0.0101 0.0122 0.0053

例 2 用欧拉法、改进欧拉法求微分方程数值解(h=0.1)。

??

?

?

?=-='

1)0(y y x y y

解 由欧拉方法(8-2),得数值计算公式

1

+i y =i

y +0.1?

??

? ?

?-i

i

i

y x y 由改进的欧拉方法(8-6),得

数值计算公式

164

???

?

???-+-+=-+=+++++)]~~()[(05.0)(1.0~11111i i i i i i i i i i i i i y x y y x y y y y x y y y

计算结果如下

表8-3

§2 龙格-库塔(Runge -

Kutta )方法

2.1 泰勒展开法

由于欧拉方法为一阶方法,为了提高

165

算法的阶,有必要讨论更高阶的方法。在泰勒展开式中取更多的项,如取p +1项可得p 阶算法。

()

p i

p i i i i y p h y h y h y y !!221++''+'+=+

()()

()i p p i y

p h R ξ111!

1++++=

其中()

k i

y )

可用复合函数求导法则计算。 如p=2时得二阶泰勒方法

())

,(2

21

][2

,!2i i y x y x i i i i i i i f f f h y x hf y y h y h y y '+'++=''+'+=+

2.2 龙格-库塔法

为了避免计算高阶导数龙格-库

塔方法利用()y x f ,某些点处的值的线性组合构造计算公式,使其按泰勒公式展开后与初值问题解的泰勒展开式比较,有尽可能多的项相同。

龙格-库塔法的一般形式为:

()()()()????

?

???

?++=++==++++=+h y h x f K h y h x f K y x f K K a K a K a h y y m i m i m i i i m m i i μλμλ,,,222122111 (8-7)

166 下面以二阶龙格-库塔法为例说明龙格-库塔法的构造过程。

(8-8)

将K 2在()i

i y x ,处按泰勒公式展开,则 ()i

i i i i y x hf a y hK a hK a y y ,122111+=++=+

()()()()()],,,,[2222h O y x f y

y x hf y x f x h

y x f h a i i i i i i i i +??

+??+λλ

=()()()()()()3

2

2

2

1

1

,,,,h O y x f y

y x f y x f x h a y x hf a a y i

i i i i i i

i

i

+??

???

???

+??+++λ =()()()()()3

2

2

2

2

1

h O x y h a x y h a a x y i

i

i

+''+'++λ 另一方面

()()

h x y x y i i +=+1=()()()()3

2

2

1h O x y h

x y h x y i i

i

+''+'+

所以为使局部截断误差的阶尽可能高,应使

()

()()??

?

?

?++==++=+1

2

2

2

12

2

1

1

1

,,hK y h x f K y x f K K a K a h y y i

i

i

i

i

i λλ

167

??

?

??==+2112221λa a a

方程组有无穷多组解,取定参数则得

到许多具体的二阶龙格-库塔公式。

如取

2

1a a ==2

1, 2

λ=1 则得龙格-库塔法即改进的欧拉公式。

同理可得更高阶的龙格-库塔法。常用的四阶(经典)龙格-库塔法:

()()()????

?

??

????

++=?

?? ??++=??? ??++==++++=+342312143211

,2,22,2,226

hK y h x f K k h y h x f K K h y h x f K y x f K K K K K h y y i i i i i i i i i i (8

-9)

例 3 用二阶龙格-库塔法求例1([]5.0,0∈x ,h 取0.1)的数值解。

解 由(8-9)得

168 ()()()()()()()?????

?

?

?

?????

++=++=++==++++=+2342

2

3212

2

1432111.01.03205.005.03205.005.0323222601K y x K K y x K K y x K y x K K K K K y y i i i i i i i i i i

计算得结果见表8-4

表8-4

____________________________________________________________________ x i 0.0 0.1 0.2 0.3 0.4 0.5 y i 1.000000 1.003322 1.013159 1.029124 1.050718 1.077217 误差 0.000000 0.000002 0.000008 0.000011 0.000024 0.000031 ____________________________________________________________________

§3 阿达姆斯(Adams )方法

将初值问题写成等价形式

()()()()()??

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

,y x y dx

x y x f x y x y i k

i x x k i i

169

记()()()x y x f x F ,=,当k 取不同的值以及对()x f 用不同的插值多项式近似时得到不同的数值算法。

3.1阿达姆斯外插公式

上式中取k=0,并取3

2

1

,,,---n n n n

x x x x 为节点,作

函数()x F 的三次插值多项式

()

x p 3=()∑=-30

i i n x

F ∏

≠=-----3

0i

j j j

n i n j n x x x x

其插值余项为()x R 3

则()x F =()x p 3

+()x R 3

()1

+n x y ()()dx x P x y n n

x x n

?++≈1

积分后得阿达姆斯外插公式

n

n y y =+1+()()()()[]

332211

,9,37,59,5524

-------+-n n n n n n n

n

y x f y x f y x f y x f h

(n=3,4,5…) (8-10)

其局部截断误差为 R n =

()

()n y h η55720

251

[]

1,+∈n n n x x η

(8-11)

由于积分区间为[]1

,+n n

x x ,插值区间为[]n

n x x ,3

-,因

此称其为阿达姆斯外插公式。

170 3.2 阿达姆斯内插公式 同样取k=0,并取2

1

1

,,,--+n n n

n x x x x 为节点,作函数()

x F 的三次插值多项式可得

n

n y y =+1+[]

211

519924

--++-+n n n n f f f f h (8-

12)

R n

()

()n y h η55720

19-

=

(8-13)

由于阿达姆斯内插公式是隐式公式,故用它

计算时也需用迭代法。

例4 用四阶阿达姆斯外插公式求初值问题

()[]5.0,0,0

0∈?????=-=x y y

x dx

dy

的数值解,取h=0.1。

解 由(8-10)得

n

n y y =+1+

()()()()[]332211,9,37,59,5524

-------+-n n n n n n n n y x f y x f y x f y x f h

=()

12.024.09.07.39.55.1824

1

321+++-+---n y y y y n n n n

(n=3,4,5)

171

计算结果见表8-5

表8-5

__________________________________________________________________ x i 0.0 0.1 0.2 0.3 0.4 0.5 y i 0 0.004837 0.018731 0.040818 0.070323 0.106535

误差 2.87×10-6 4.82×10-6 ____________________________________________________________________

§4 收敛性与稳定性

4.1收敛性

定义4 如果一数值方法对任意固定的

点ih

x

x i

+=0,当h=0

→-

i

x

x i

时有)

(i i

x y y

→,则称

该方法是收敛的。

定理1 如果()y x f ,关于y 满足李普希兹(Lipschitz )条件,即存在常数L ,使 ()()2

1

2

1

,,y y L y x f y x f -≤-,且()x y ''有界,则欧拉方法的整体截断误差满足

()()()()

()120

-+-≤---a

b L a

b L i

i

e L

Mh y x y e y x y 其中M=()x y b a x ''∈]

,[max 。(

由整体截断误差估计式知,当初值误差为

0时有

172 ()()

()12-≤

--a b L i i e L

Mh y x y

当0→h 时,)(i

i

x y y →,欧拉方法收敛。

4.2 稳定性

一个即使收敛的数值方法,由于初值一般带有误差,且计算过程中不断产生舍入误差,随着误差的传播,对计算结果可能产生很大的影响。

定义5 设用某数值方法计算i

y 时,所得实际结果为*i

y ,且由误差*-=i

i

i y y δ引起以后各节点处j y (j>i )的误差为j δ,如果总有i

j δδ≤,则称该算法是绝对稳定的。

由于稳定性的讨论比较复杂,常用试验方程y '=λy (其中λ为常数),并把能使某一数值方法绝对稳定的h λ的允许取值范围称为该方法的绝对稳定域。

对试验方程应用欧拉算法得 1+i y =(1+λh )i

y 设i y 上有误差i δ,它的传播使1

+i y 产生误差δi

+1,设y *

i =i y +i

δ

173

按欧拉公式计算得y *i +1=1

+i y +1

+i δ时不产生新的误差,则

y *i +1=(1+λh )y *

i 两式相减,可得

δi +1=(1+λh )i

δ

为保证误差在以后的计算中不至增大,应选h 使

1

1≤+h λ 即λ2

0-≤≤h (8

-14)

当h 满足上式时,则称欧拉方法是条件稳定的。上式称为稳定条件。

对一般方程()y x f dx

dy

,=,可近似地取()

i i y x y f

,??-=λ

以便判断稳定性,并确定计算1

+i y 时的步长

h 。

例5 对初值问题

()??

?=-='1

020y y y 求欧拉方法的稳

定条件。

解: 因为λ=-20

174 所以取步长为

λ2

0-

≤≤h =202--=0.1时欧拉方法是条件稳定的。

§5 方程组与高阶方程的数值解法

5.1 一阶方程组的数值解法

设初值问题

()()()()??

?=='=='0

000,,,,,,z x z z y x g z y x y z y x f y

由单个方程的经典龙格-库塔法可得

()()

??

???

++++=++++=++4321143211

226226

L L L L h

z z K K K K h y y i i i i

其中 ()i

i

i

z y x f k ,,1

=

()i

i

i

z y x g L ,,1

=

f

k =2(1

1

2

,2,2L h

z K h y h x i

i

i

+++)

g

L =2(1

1

2

,2,2L h

z K h y h x i

i

i

+++)

175

f

k =3(2

2

2

,2,2L h

z K h y h x i

i

i

+++) g

L =3(2

2

2

,2,2L h

z K h y h x i

i

i

+++)

()

334,,hL z hk y h x f k i i i +++= ()

334,,hL z hk y h x g L i i i +++=

5.2 高阶方程的数值解法

对于高阶常微分方程初值问题,原则

上总可转化为一阶方程组来来解。 例如,二阶常微分方程初值问题 ()()()??

?'='='=''0

000,,,y x y y x y y y x f y 作变换z=y ' 则方程化为一阶方程组

()()()????

?'=='=='0

00

0,,,,y x z z y x f z y x y z y

则可用一阶方程组的数值解法来计算。

习 题 八

1 用欧拉方法和改进欧拉方法求初值问题

常微分方程数值解法

常微分方程数值解法 【作用】 微分方程建模是数学建模的重要方法,因为许多实际问题的数学描述将导致求解微 分方程的定解问题。把形形色色的实际问题化成微分方程的定解问题,大体上可以按以 下几步: 1. 根据实际要求确定要研究的量(自变量、未知函数、必要的参数等)并确定坐标系。 2. 找出这些量所满足的基本规律(物理的、几何的、化学的或生物学的等等)。 3. 运用这些规律列出方程和定解条件。 基本模型 1.发射卫星为什么用三级火箭 2.人口模型 3.战争模型 4.放射性废料的处理 通常需要求出方程的解来说明实际现象,并加以检验。如果能得到解析形式的解固然是便于分析和应用的,但是我们知道,只有线性常系数微分方程,并且自由项是某些特殊类型的函数时,才可以得到这样的解,而绝大多数变系数方程、非线性方程都是所谓“解不出来”的于是对于用微分方程解决实际问题来说,数值解法就是一个十分重要的手段。 1.改进Euler 法: 2.龙格—库塔(Runge—Kutta)方法: 【源程序】 1.改进Euler 法: function [x,y]=eulerpro(fun,x0,x1,y0,n);%fun为函数,(x0,x1)为x区间, y0为初始值,n为子区间个数 if nargin<5,n=50;end h=(x1-x0)/n; x(1)=x0;y(1)=y0; for i=1:n x(i+1)=x(i)+h; y1=y(i)+h*feval(fun,x(i),y(i)); y2=y(i)+h*feval(fun,x(i+1),y1); y(i+1)=(y1+y2)/2; end 调用command窗口 f=inline('-2*y+2*x^2+2*x') [x,y]=eulerpro(f,0,0.5,1,10) 求解函数y'=?2y+2x2+2x ,(0 ≤x ≤0.5),y(0) = 1 2.龙格—库塔(Runge—Kutta)方法: [t,y]=solver('F',tspan,y0) 这里solver为ode45,ode23,ode113,输入参数 F 是用M文件定义的微分方程y'= f (x, y) 右端的函数。tspan=[t0,tfinal]是求解区间,y0是初值。 注:ode45和ode23变步长的,采用Runge-Kutta算法。

常微分方程数值解

第四章常微分方程数值解 [课时安排]6学时 [教学课型]理论课 [教学目的和要求] 了解常微分方程初值问题数值解法的一些基本概念,如单步法和多步法,显式和隐式,方法的阶数,整体截断误差和局部截断误差的区别和关系等;掌握一阶常微分方程初值问题的一些常用的数值计算方法,例如欧拉(Euler)方法、改进的欧拉方法、龙贝-库塔(Runge-Kutta)方法、阿达姆斯(Adams)方法等,要注意各方法的特点及有关的理论分析;掌握构造常微分方程数值解的数值积分的构造方法和泰勒展开的构造方法的基本思想,并能具体应用它们导出一些常用的数值计算公式及评估截断误差;熟练掌握龙格-库塔(R-K)方法的基本思想,公式的推导,R-K公式中系数的确定,特别是能应用“标准四阶R-K公式”解题;掌握数值方法的收敛性和稳定性的概念,并能确定给定方法的绝对稳定性区域。[教学重点与难点] 重点:欧拉方法,改进的欧拉方法,龙贝-库塔方法。 难点:R—K方法,预估-校正公式。 [教学内容与过程] 4.1 引言 本章讨论常微分方程初值问题 (4.1.1) 的数值解法,这也是科学与工程计算经常遇到的问题,由于只有很特殊的方程能用解析方法求解,而用计算机求解常微分方程的初值问题都要采用数值方法.通常我们假定(4.1.1)中 f(x,y)对y满足Lipschitz条件,即存在常数L>0,使对,有 (4.1.2) 则初值问题(4.1.1)的解存在唯一. 假定(4.1.1)的精确解为,求它的数值解就是要在区间上的一组离散点 上求的近似.通常取 ,h称为步长,求(4.1.1)的数值解是按节点的顺序逐步 推进求得.首先,要对方程做离散逼近,求出数值解的公式,再研究公式的局部截

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

第七章 常微分方程初值问题的数值解法 --------学习小结 一、本章学习体会 通过本章的学习,我了解了常微分方程初值问题的计算方法,对于解决那些很难求解出解析表达式的,甚至有解析表达式但是解不出具体的值的常微分方程非常有用。在这一章里求解常微分方程的基本思想是将初值问题进行离散化,然后进行迭代求解。在这里将初值问题离散化的方法有三种,分别是差商代替导数的方法、Taylor 级数法和数值积分法。常微分方程初值问题的数值解法的分类有显示方法和隐式方法,或者可以分为单步法和多步法。在这里单步法是指计算第n+1个y 的值时,只用到前一步的值,而多步法则是指计算第n+1个y 的值时,用到了前几步的值。通过对本章的学习,已经能熟练掌握如何用Taylor 级数法去求解单步法中各方法的公式和截断误差,但是对线性多步法的求解理解不怎么透切,特别是计算过程较复杂的推理。 在本章的学习过程中还遇到不少问题,比如本章知识点多,公式多,在做题时容易混淆,其次对几种R-K 公式的理解不够透彻,处理一个实际问题时,不知道选取哪一种公式,通过课本里面几种方法的计算比较得知其误差并不一样,,这个还需要自己在往后的实际应用中多多实践留意并总结。 二、本章知识梳理 常微分方程初值问题的数值解法一般概念 步长h ,取节点0,(0,1,...,)n t t nh n M =+=,且M t T ≤,则初值问题000 '(,),()y f t y t t T y t y =≤≤?? =?的数值解法的一般形式是 1(,,,...,,)0,(0,1,...,)n n n n k F t y y y h n M k ++==-

常微分方程的数值解法

第九章 常微分方程的数值解法 在自然科学的许多领域中,都会遇到常微分方程的求解问题。然而,我们知道,只有少数十分简单的微分方程能够用初等方法求得它们的解,多数情形只能利用近似方法求解。在常微分方程课中已经讲过的级数解法,逐步逼近法等就是近似解法。这些方法可以给出解的近似表达式,通常称为近似解析方法。还有一类近似方法称为数值方法,它可以给出解在一些离散点上的近似值。利用计算机解微分方程主要使用数值方法。 我们考虑一阶常微分方程初值问题 ?????==0 0)() ,(y x y y x f dx dy 在区间[a, b]上的解,其中f (x, y )为x, y 的已知函数,y 0为给定的初始值,将上述问题 的精确解记为y (x )。数值方法的基本思想是:在解的存在区间上取n + 1个节点 b x x x x a n =<<<<= 210 这里差i i i x x h -=+1,i = 0,1, …, n 称为由x i 到x i +1的步长。这些h i 可以不相等,但一 般取成相等的,这时n a b h -=。在这些节点上采用离散化方法,(通常用数值积分、微分。泰勒展开等)将上述初值问题化成关于离散变量的相应问题。把这个相应问题的解y n 作为y (x n )的近似值。这样求得的y n 就是上述初值问题在节点x n 上的数值解。一般说来,不同的离散化导致不同的方法。 §1 欧拉法与改进欧拉法 1.欧拉法 1.对常微分方程初始问题 (9.2) )((9.1) ),(00???? ?==y x y y x f dx dy 用数值方法求解时,我们总是认为(9.1)、(9.2)的解存在且唯一。 欧拉法是解初值问题的最简单的数值方法。从(9.2)式由于y (x 0) = y 0已给定,因而可以算出 ),()('000y x f x y = 设x 1 = h 充分小,则近似地有: ),()(') ()(00001y x f x y h x y x y =≈- (9.3)

常微分方程数值解法

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 。

MATLAB求解常微分方程数值解

利用MATLAB求解常微分方程数值解

目录 1. 内容简介 (1) 2. Euler Method(欧拉法)求解 (1) 2.1. 显式Euler法和隐式Euler法 (2) 2.2. 梯形公式和改进Euler法 (3) 2.3. Euler法实用性 (4) 3. Runge-Kutta Method(龙格库塔法)求解 (5) 3.1. Runge-Kutta基本原理 (5) 3.2. MATLAB中使用Runge-Kutta法的函数 (7) 4. 使用MATLAB求解常微分方程 (7) 4.1. 使用ode45函数求解非刚性常微分方程 (8) 4.2. 刚性常微分方程 (9) 5. 总结 (9) 参考文献 (11) 附录 (12) 1. 显式Euler法数值求解 (12) 2. 改进Euler法数值求解 (12) 3. 四阶四级Runge-Kutta法数值求解 (13) 4.使用ode45求解 (14)

1.内容简介 把《高等工程数学》看了一遍,增加对数学内容的了解,对其中数值解法比较感兴趣,这大概是因为在其它各方面的学习和研究中经常会遇到数值解法的问题。理解模型然后列出微分方程,却对着方程无从下手,无法得出精确结果实在是让人难受的一件事情。 实际问题中更多遇到的是利用数值法求解偏微分方程问题,但考虑到先从常微分方程下手更为简单有效率,所以本文只研究常微分方程的数值解法。把一个工程实际问题弄出精确结果远比弄清楚各种细枝末节更有意思,因此文章中不追求非常严格地证明,而是偏向如何利用工具实际求解出常微分方程的数值解,力求将课程上所学的知识真正地运用到实际方程的求解中去,在以后遇到微分方程的时候能够熟练运用MATLAB得到能够在工程上运用的结果。 文中求解过程中用到MATLAB进行数值求解,主要目的是弄清楚各个函数本质上是如何对常微分方程进行求解的,对各种方法进行MATLAB编程求解,并将求得的数值解与精确解对比,其中源程序在附录中。最后考察MATLAB中各个函数的适用范围,当遇到实际工程问题时能够正确地得到问题的数值解。 2.Euler Method(欧拉法)求解 Euler法求解常微分方程主要包括3种形式,即显式Euler法、隐式Euler法、梯形公式法,本节内容分别介绍这3种方法的具体内容,并在最后对3种方法精度进行对比,讨论Euler法的实用性。 本节考虑实际初值问题 使用解析法,对方程两边同乘以得到下式

常微分方程的数值解

实验4 常微分方程的数值解 【实验目的】 1.掌握用MATLAB软件求微分方程初值问题数值解的方法; 2.通过实例用微分方程模型解决简化的实际问题; 3.了解欧拉方法和龙格-库塔方法的基本思想和计算公式,及稳定性等概念。 【实验内容】 题3 小型火箭初始重量为1400kg,其中包括1080kg燃料。火箭竖直向上发射时燃料燃烧率为18kg/s,由此产生32000N的推力,火箭引擎在燃料用尽时关闭。设火箭上升时空气阻力正比于速度的平方,比例系数为m,求引擎关闭瞬间火箭的高度、速度、加速度,及火箭到达最高点的时的高度和加速度,并画出高度、速度、加速度随时间变化的图形。 模型及其求解 火箭在上升的过程可分为两个阶段,在全过程中假设重力加速度始终保持不变,g=s2。 在第一个过程中,火箭通过燃烧燃料产生向上的推力,同时它还受到自身重力(包括自重和该时刻剩余燃料的重量)以及与速度平方成正比的空气阻力的作用,根据牛顿第二定律,三个力的合力产生加速度,方向竖直向上。因此有如下二式: a=dv/dt=/m=/(1400-18t) dh/dt=v 又知初始时刻t=0,v=0,h=0。记x(1)=h,x(2)=v,根据MATLAB 可以求出0到60秒内火箭的速度、高度、加速度随时间的变化情况。程序如下: function [ dx ] = rocket( t,x ) a=[*x(2)^2)/(1400-18*t)]; dx=[x(2);a]; end ts=0:1:60;

x0=[0,0]; [t,x]=ode45(@rocket,ts,x0); h=x(:,1); v=x(:,2); a=[*(v.^2))./(1400-18*t)]; [t,h,v,a]; 数据如下: t h v a 000

常微分方程数值解法

第七章 常微分方程数值解法 常微分方程中只有一些典型方程能求出初等解(用初等函数表示的解),大部分的方程是求不出初等解的。另外,有些初值问题虽然有初等解,但由于形式太复杂不便于应用。因此,有必要探讨常微分方程初值问题的数值解法。本章主要介绍一阶常微分方程初值问题的欧拉法、龙格-库塔法、阿达姆斯方法,在此基础上推出一阶微分方程组与高阶方程初值问题的 数值解法;此外,还将简要介绍求解二阶常微分方程值问题的差分方法、试射法。 第一节 欧拉法 求解常微分方程初值问题 ?????==0 0)() ,(y x y y x f dx dy (1) 的数值解,就是寻求准确解)(x y 在一系列离散节点 <<<<

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

常微分方程初值问题数值解法 朱欲辉 (浙江海洋学院数理信息学院, 浙江舟山316004) [摘要]:在常微分方程的课程中讨论的都是对一些典型方程求解析解的方法.然而在生产实 际和科学研究中所遇到的问题往往很复杂, 在很多情况下都不可能给出解的解析表达式. 本篇文章详细介绍了常微分方程初值问题的一些数值方法, 导出了若干种数值方法, 如Euler法、改进的Euler法、Runge-Kutta法以及线性多步法中的Adams显隐式公式和预测校正 公式, 并且对其稳定性及收敛性作了理论分析. 最后给出了数值例子, 分别用不同的方法计算出近似解, 从得出的结果对比各种方法的优缺点. [关键词]:常微分方程;初值问题; 数值方法; 收敛性; 稳定性; 误差估计 Numerical Method for Initial-Value Problems Zhu Yuhui (School of Mathematics, Physics, and Information Science, Zhejiang Ocean University, Zhoushan, Zhejiang 316004) [Abstract]:In the course about ordinary differential equations, the methods for analytic solutions of some typical equations are often discussed. However, in scientific research, the problems are very complex and the analytic solutions about these problems can’t be e xpressed explicitly. In this paper, some numerical methods for the initial-value problems are introduced. these methods include Euler method, improved Euler method, Runge-Kutta method and some linear multistep method (e.g. Adams formula and predicted-corrected formula). The stability and convergence about the methods are presented. Some numerical examples are give to demonstrate the effectiveness and accuracy of theoretical analysis. [Keywords]:Ordinary differential equation; Initial-value problem; Numerical method; Convergence; Stability;Error estimate

常微分方程数值解法

第八章 常微分方程的数值解法 一.内容要点 考虑一阶常微分方程初值问题:?????==0 0)() ,(y x y y x f dx dy 微分方程的数值解:设微分方程的解y (x )的存在区间是[a,b ],在[a,b ]内取一系列节 点a= x 0< x 1<…< x n =b ,其中h k =x k+1-x k ;(一般采用等距节点,h=(b-a)/n 称为步长)。在每个节点x k 求解函数y(x)的近似值:y k ≈y(x k ),这样y 0 , y 1 ,...,y n 称为微分方程的数值解。 用数值方法,求得f(x k )的近似值y k ,再用插值或拟合方法就求得y(x)的近似函数。 (一)常微分方程处置问题解得存在唯一性定理 对于常微分方程初值问题:?????==0 0)() ,(y x y y x f dx dy 如果: (1) 在B y y A x x 00≤-≤≤,的矩形内),(y x f 是一个二元连续函数。 (2) ),(y x f 对于y 满足利普希茨条件,即 2121y y L y x f y x f -≤-),(),(则在C x x 0≤≤上方程?????==0 0)() ,(y x y y x f dx dy 的解存在且唯一,这里C=min((A-x 0),x 0+B/L),L 是利普希茨常数。 定义:任何一个一步方法可以写为),,(h y x h y y k k k 1k Φ+=+,其中),,(h y x k k Φ称为算法的增量函数。 收敛性定理:若一步方法满足: (1)是p 解的. (2) 增量函数),,(h y x k k Φ对于y 满足利普希茨条件. (3) 初始值y 0是精确的。则),()()(p h O x y kh y =-kh =x -x 0,也就是有 0x y y lim k x x kh 0h 0 =--=→)( (一)、主要算法 1.局部截断误差 局部截断误差:当y(x k )是精确解时,由y(x k )按照数值方法计算出来的1~ +k y 的误差y (x k+1)- 1~ +k y 称为局部截断误差。 注意:y k+1和1~ +k y 的区别。因而局部截断误差与误差e k +1=y (x k +1) -y k +1不同。 如果局部截断误差是O (h p+1),我们就说该数值方法具有p 阶精度。

(整理)常微分方程数值解法

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 -=<<<<=L (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 +=+=-L 方法: (i.4) 从(i.1b) 给出的初始值0u 出发,由上式可以依次算出1,,N t t L 上的差分解1,,N u u L 。

常微分方程常用数值解法.

第一章绪论 1.1 引言 常微分方程是现代数学的一个重要分支,是人们解决各种实际问题的有效工具。微分方程的理论和方法从17世纪末开始发展起来,很快成了研究自然现象的强有力工具,在17到18世纪,在力学、天文、科学技术、物理中,就已借助微分方程取得了巨大的成就。1864年Leverrer根据这个方程预见了海王星的存在,并确定出海王星在天空中的位置。现在,常微分方程在许多方面获得了日新月异的应用。这些应用也为常微分方程的进一步发展提供了新的问题,促使人们对微分方程进行更深入的研究,以便适应科学技术飞速发展的需要。 研究常微分方程常用数值解是数学工作者的一项基本的且重要的工作。在国内外众多数学家的不懈努力,使此学科基本上形成了一套完美的体系。微分方程的首要问题是如何求一个给定方程的通解或特解。到目前为止,人们已经对许多微分方程得出了求解的一般方法。由于在生产实际和科学研究中所遇到的微分方程问题比较复杂,使这些问题的解即使能求出解析表达式,也往往因计算量太大而难于求出,而对于一些典型的微分方程则可以运用基本方法求出其解析解,并可以根据初值问题的条件把其中的任意常数确定下来。 由于求通解存在许多困难,人们就开始研究带某种定解条件的特解。首先是Cauchy对微分方程初始解的存在惟一性进行了研究。目前解的存在惟一性、延拓性、大范围的存在性以及解对初始解和参数的延续性和可微性等理论问题都已发展成熟。与此同时,人们开始采取各种近似方法来求微分方程的特解,例如求微分方程数值解的Euler折线法、Runge-Kutta法等,可以求得若干个点上微分方程的近似解。最后,由于当代高科技的发展为数学的广泛应用和深入研究提供了更好的手段。用计算机结合Matlab软件求方程的精确解、近似解,对解的性态进行图示和定性、稳定性研究都十分方便有效。 本章先介绍常微分的一般概念、导出微分方程的一些典型例子及求解微分方程的思路分析。从而得到常微分方程的常用数值解法。

常微分方程数值解法

第八章 常微分方程数值解法 考核知识点: 欧拉法,改进欧拉法,龙格-库塔法,单步法的收敛性与稳定性。 考核要求: 1. 解欧拉法,改进欧拉法的基本思想;熟练掌握用欧拉法,改进欧拉法、求微 分方程近似解的方法。 2. 了解龙格-库塔法的基本思想;掌握用龙格-库塔法求微分方程近似解的方 法。 3. 了解单步法的收敛性、稳定性与绝对稳定性。 例1 用欧拉法,预估——校正法求一阶微分方程初值问题 ? ??=-='1)0(y y x y ,在0=x (0,1)0.2近似解 解 (1)用1.0=h 欧拉法计算公式 n n n n n n x y y x y y 1.09.0)(1.01+=-+=+,1.0=n 计算得 9.01=y 82.01.01.09.09.02=?+?=y (2)用预估——校正法计算公式 1,0)(05.01.09.0)0(111)0(1=???-+-+=+=++++n y x y x y y x y y n n n n n n n n n 计算得 91.01=y ,83805.02=y 例2 已知一阶初值问题 ???=-='1 )0(5y y y 求使欧拉法绝对稳定的步长n 值。 解 由欧拉法公式 n n n n y h y h y y )51(51-=-=+ n n y h y ~)51(~1-=+

相减得01)51()51(e h e h e n n n -==-=-Λ 当 151≤-h 时,4.00≤

Ch5常微分方程数值解法

Ch5. 常微分方程数值解法 §1. 引言 1. 问题的提出 假设一阶微分方程初值问题???=='00 )() ,(y x y y x f y 中的(),f x y 关于y 满足Lipschitz 条件,即存在常数L ,使得()()1212,,f x y f x y L y y -≤-,则由常微分方程理论知,初值问题有唯一解。 除了一些特殊类型的方程外,许多微分方程都没有解析解。 2. 数值解法的基本思想——离散化 计算解)(x y 在离散点 ,,,,10n x x x 上值)(i x y 的近似值i y ,ih x x i +=0。 3. 几个基本概念 (1) 单步法与多步法 若计算1i y +时只用到i y ,则称这种方法为单步法,如()1,i i i i y y hf x y +=+;若计算1i y +时需用到()1,, ,1i i i k y y y k --≥,则称这种方法为多步法。 (2) 显式与隐式 若1i y +可以直接用1,,,i i i k y y y --表示,则称此计算公式为显式,否则称之为 隐式。 §2. Euler 方法 1. Euler 公式 将),(y x f y ='在[]1,+n n x x 上积分,?+=-+1))(,()()(1n n x x n n dx x y x f x y x y , 得? +=≈-+1))(,(1n n x x n n I dx x y x f y y ,用数值积分法求I 。 (1) ()n n y x hf I ,=,得()n n n n y x hf y y ,1+=+。 Euler 公式 (2) ()11,++=n n y x hf I ,得()111,++++=n n n n y x hf y y 。 后退的Euler 公式 (3) ()()[]11,,2 +++=n n n n y x f y x f h I , 得()()[]111 ,,2 +++++=n n n n n n y x f y x f h y y 。 梯形公式(隐式)

数值分析--第9章 常微分方程数值解

数值分析--第9章常微分方程数值解

第九章 常微分方程数值解法 许多实际问题的数学模型是微分方程或微分方程的定解问题。如物体运动、电路振荡、化学反映及生物群体的变化等。常微分方程可分为线性、非线性、高阶方程与方程组等类;线性方程包含于非线性类中,高阶方程可化为一阶方程组。若方程组中的所有未知量视作一个向量,则方程组可写成向量形式的单个方程。因此研究一阶微分方程的初值问题 ?????=≤≤=0)(),(y a y b x a y x f dx dy , (9-1) 的数值解法具有典型性。 常微分方程的解能用初等函数、特殊函数或它们的级数与积分表达的很少。用解析方法只能求出线性常系数等特殊类型的方程的解。对非线性方程来说,解析方法一般是无能为力的,即使某些解具有解析表达式,这个表达式也可能非常复杂而不便计算。因此研究微分方程的数值解法是非常必要的。 只有保证问题(9-1)的解存在唯一的前提下,研究其数值解法或者说寻求其数值解才有意义。由常微分方程的理论知,如果(9-1)中的),(y x f 满足条件 (1)),(y x f 在区域} ),({+∞<<∞-≤≤=y b x a y x D ,上连续; (2)),(y x f 在D 上关于y 满足Lipschitz 条件,即存在常数L ,使得 y y L y x f y x f -≤-),(),( 则初值问题(9-1)在区间],[b a 上存在惟一的连续解)(x y y =。在

下面的讨论中,我们总假定方程满足以上两个条件。 所谓数值解法,就是求问题(9-1)的解)(x y y =在若干点 b x x x x a N =<<<<= 210 处的近似值),,2,1(N n y n =的方法。),,2,1(N n y n =称为问题(9-1)的 数值解,n n x x h -=+1称为由n x 到1+n x 的步长。今后如无特别说明, 我们总假定步长为常量。 建立数值解法,首先要将微分方程离散化,一般采用以下几种方法: (1) 用差商近似导数 在问题(9-1)中,若用向前差商h x y x y n n )() (1-+代替)(n x y ',则得 )1,,1,0( ))(,()()(1-=≈-+N n x y x f h x y x y n n n n n )(n x y 用其近似值n y 代替,所得结果作为)(1+n x y 的近似值,记为1+n y ,则有 1(,) (0,1,,1)n n n n y y hf x y n N +=+=- 这样,问题(9-1)的近似解可通过求解下述问题 100 (,) (0,1,,1)()n n n n y y hf x y n N y y x +=+=-??=? (9-2) 得到,按式(9-2)由初值0y 经过N 步迭代,可逐次算出N y y y ,,21。此方程称为差分方程。 需要说明的是,用不同的差商近似导数,将得到不同的计算公式。 (2) 用数值积分法 将问题(9-1)中的微分方程在区间],[1+n n x x 上两边积分,可得 )1,,1,0( ))(,()()(1 1-==-?++N n dx x y x f x y x y n n x x n n (9-3) 用1+n y ,n y 分别代替)(1+n x y ,)(n x y ,若对右端积分采用取左端点的矩形公式,即

常微分方程数值解

2.4 常微分方程数值解 函数 ode45、ode23、ode113、ode15s 、ode23s 、ode23t 、ode23tb 功能 常微分方程(ODE )组初值问题的数值解 参数说明: solver 为命令ode45、ode23,ode113,ode15s,ode23s,ode23t,ode23tb 之一。 Odefun 为显式常微分方程y’=f(t,y),或为包含一混合矩阵的方程M(t,y)*y’=f(t,y)。命令 ode23只能求解常数混合矩阵的问题;命令ode23t 与ode15s 可以求解奇异矩阵的问题。 Tspan 积分区间(即求解区间)的向量tspan=[t0,tf]。要获得问题在其他指定时间点 t0,t1,t2,…上的解,则令tspan=[t0,t1,t2,…,tf](要求是单调的)。 Y0 包含初始条件的向量。 Options 用命令odeset 设置的可选积分参数。 P1,p2,… 传递给函数odefun 的可选参数。 格式 [T,Y] = solver(odefun,tspan,y0) %在区间tspan=[t0,tf]上,从t0到tf ,用初始条 件y0求解显式微分方程y’=f(t,y)。对于标量t 与列向量y ,函数f=odefun(t,y)必须返回一f(t,y)的列向量f 。解矩阵Y 中的每一行对应于返回的时间列向量T 中的一个时间点。要获得问题在其他指定时间点t0,t1,t2,…上的解,则令tspan=[t0,t1,t2,…,tf](要求是单调的)。 [T,Y] = solver(odefun,tspan,y0,options) %用参数options (用命令odeset 生成) 设置的属性(代替了缺省的积分参数),再进行操作。常用的属性包括相对误差值RelTol (缺省值为1e-3)与绝对误差向量AbsTol (缺省值为每一元素为1e-6)。 [T,Y] =solver(odefun,tspan,y0,options,p1,p2…) 将参数p1,p2,p3,..等传递给函数 odefun ,再进行计算。若没有参数设置,则令options=[]。 1.求解具体ODE 的基本过程: (1)根据问题所属学科中的规律、定律、公式,用微分方程与初始条件进行描述。 F(y,y’,y’’,…,y (n),t) = 0 y(0)=y 0,y’(0)=y 1,…,y (n-1)(0)=y n-1 而y=[y;y(1);y(2);…,y(m-1)],n 与m 可以不等 (2)运用数学中的变量替换:y n =y (n-1),y n-1=y (n-2),…,y 2=y 1=y ,把高阶(大于2阶)的方 程(组)写成一阶微分方程组:????????? ???=?????? ????????′′′=′)y ,t (f )y ,t (f )y ,t (f y y y y n 21n 21M M ,????????????=????????????=n 10n 210y y y )0(y )0(y )0(y y M M (3)根据(1)与(2)的结果,编写能计算导数的M-函数文件odefile 。 (4)将文件odefile 与初始条件传递给求解器Solver 中的一个,运行后就可得到ODE 的、在指定时间区间上的解列向量y (其中包含y 及不同阶的导数)。 2.求解器Solver 与方程组的关系表见表2-3。 表2-3 函数指令 含 义 函 数 含 义 ode23 普通2-3阶法解ODE odefile 包含ODE 的文件 ode23s 低阶法解刚性ODE odeset 创建、更改Solver 选项 ode23t 解适度刚性ODE 选项 odeget 读取Solver 的设置值 ode23tb 低阶法解刚性ODE odeplot ODE 的时间序列图 求解器 Solver ode45 普通4-5阶法解ODE 输出 odephas2 ODE 的二维相平面图

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

常微分方程初值问题数值求解 学生:张玉娟 学号:3070942232 指导老师:梁鹏 摘 要:数值求解是指在没有办法知道未知函数的解析表达式的情况下,近似计算未知函数在其定义域 中的某些离散点上的函数值。本文利用欧拉方法、梯形方法和龙格_库塔方法三种单步法基于Matlab 求解常微分方程初值问题。 关键词:常微分初值问题;数值求解;欧拉方法;梯形方法;龙格_库塔方法;Matlab 实现 1 引言 很多科学技术和工程问题常用微分方程的形式建立数学模型,因此微分方程的求解是很有意义的。建立微分方程只是解决问题的第一步,通常需要求出方程的解来说明实际现象,并加以检验。如果能得到解析形式的解固然是便于分析和应用的,但是我们知道,虽然求解常微分方程有各种各样的解析方法,但解析方法只能用来求解一些典型的方程,而对于绝大多数的微分方程问题,很难或者根本不可能得到它的解析解,实际问题终归结出来的微分方程主要靠数值解法。因此,研究微分方程求解的数值方法是非常有意义的。本文介绍了欧拉法、梯形法和四阶龙格_库塔方法三种单步法,通过Matlab 的平台运行。 2 建模 常微分方程初值问题的数学模型是:求y ()y x =,使之满足 0'()(,)()y x f x y x b y a y =≤≤??=?,(a ),, (1) 其中0y ,a ,b 是已知的常数,(,)f x y 是已知函数,且满足条件: (,)(,')'f x y f x y L y y -≤-, 式中的L 是不依赖于y ,'y 的常数,称为利普希茨(Lipschitz )常数。 由常微分方程理论知识可知,上述问题存在唯一解()y x 。现在的目标就是计算区间[],a b 上等节点i x a ih =+处该未知函数的函数值()i y x ,其中()/h b a N =-,0,1,2,...,i N =。为此,可以用求解常微分方程问题的单步法,即欧拉方法、梯形方法和龙格_库塔方法求解。 3 算法求解和程序设计 3.1 欧拉方法 将微分方程离散化,用向前商 1()() n n y x y x h +-代替微分()n y x ,代入(1)中的微分方程,可得 1()() (,())1,2,3,...n n n n y x y x f x y x n h +-==,() 化简可得

常微分方程的几种数值解法

┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊ 常微分方程的几种数值解法 数学与应用数学肖振华指导教师张秀艳 【摘要】自然界与工程技术中的很多现象,可以归结为微分方程定解问题。其中,常微分方程求解是微分方程的重要基础内容。但是,对于许多的微分方程,往往很难得到甚至不存在精确的解析表达式,这时候,数值解提供了一个很好的解决思路。,针对于此,本文对常微分方程数值解法进行了简单研究,主要讨论了一些常用的数值解法,如欧拉法、改进的欧拉法、Runge—Kutta方法、Adams预估校正法以及勒让德谱方法等,通过具体的算例,结合MA TLAB求解画图,初步给出了一般常微分方程数值解法的求解过程。同时,通过对各种方法的误差分析,让大家对各种方法的特点和适用范围有一个直观的感受。 【关键词】常微分方程数值解法MA TLAB 误差分析 【Abstract】 Many phenomena in nature and engineering can be attributed to the definite solution of the problem for differential equations. Among them, the ordinary differential equation solving is an important foundation for the content of the differential equations. However, many of the differential equations are often difficult to obtain accurate analytical expression .At this time, the numerical solution provides a good idea. For the Numerical Solution of Ordinary Differential Equations in this article, we focuses on some commonly used numerical solution, such as the Euler method, improved Euler method, Runge-Kutta method, Adams predictor corrector method as well as newer spectral methods. Through specific examples, combined with MATLAB solving and drawing, we initially know the solution process of general numerical solution of ordinary differential equations . At the same time, according to the error analysis of various methods , everyone has an intuitive feel of the characteristics and scope of the various methods. 【Keywords】Ordinary Differential Equations Numerical Solution MATLAB error analysis

常微分方程数值解

第八章 常微分方程数值解 姓名 学号 班级 习题主要考察点:欧拉方法的构造,单步法的收敛性和稳定性的讨论,线性多步法中亚当姆斯方法的构造和讨论。 1 用改进的欧拉公式,求以下微分方程 ]1,0[1)0(2∈?????=-='x y y x y y 的数值解(取步长2.0=h ),并与精确解作比较。(改进的尤拉公式的应用) 解:原方程可转化为 x y y y 22 -=',令22 y z =,有x z dx dz 22-=- 解此一阶线性微分方程,可得 12+= x y 。 利用以下公式 )4,3,2,1,0()(21)2(2.0)2(2.01=???? ?????+=-?+=-?+=+i y y y y x y y y y x y y y c p i p i p i c i i i i p 求在节点)5,4,3,2,1(2.0=?=i i x i 处的数值解i y ,其中,初值为1,000==y x 。 MATLAB 程序如下: x(1)=0;%初值节点 y(1)=1;%初值 fprintf('x(%d)=%f,y(%d)=%f,yy(%d)=%f\n',1,x(1),1,y(1),1,y(1)); for i=1:5 yp=y(i)+0.2*(y(i)-2*x(i)/y(i));%预报值 yc=y(i)+0.2*(yp-2*x(i)/yp);%校正值 y(i+1)=(yp+yc)/2;%改进值 x(i+1)=x(i)+0.2;%节点值 yy(i+1)=sqrt(2*x(i+1)+1);%精确解 fprintf('x(%d)=%f,y(%d)=%f,yy(%d)=%f\n',i+1,x(i+1),i+1,y(i+1),i+1,yy(i+1)); end 程序运行的结果如下: x(1)=0.000000, y(1)=1.000000, yy(1)=1.000000 x(2)=0.200000, y(2)=1.220000, yy(2)=1.183216 x(3)=0.400000, y(3)=1.420452, yy(3)=1.341641 x(4)=0.600000, y(4)=1.615113, yy(4)=1.483240 x(5)=0.800000, y(5)=1.814224, yy(5)=1.612452 x(6)=1.000000, y(6)=2.027550, yy(6)=1.732051