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

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

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

朱欲辉

(浙江海洋学院数理信息学院, 浙江舟山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

1前言

自然界和工程技术中的很多现象, 例如自动控制系统的运行、电力系统的运行、飞行器的运动、化学反应的过程、生态平衡的某些问题等, 都可以抽象成为一个常微分方程初值问题. 其真解通常难以通过解析的方法来获得, 至今有许多类型的微分方程还不能给出解的解析表达式, 一般只能用数值的方法进行计算. 有关这一问题的研究早在十八世纪就已经开始了, 特别是计算机的普遍应用, 许多微分方程问题都获得了数值解, 从而能使人们认识解的种种性质及其数值特征, 为工程技术等实际问题提供了定量的依据.

关于常微分方程初值问题的数值计算方法, 许多学者己经做了大量的工作. 1768年, Euler 提出了关于常微分方程初值问题的方法, 1840年, Cauchy 第一次对初值问题进行了仔细的分析, 早期的常微分方程数值解的问题来源于天体力学. 在1846年, 当Adams 还是一个学生的时候, 和Le Verrier 一起根据天王星轨道中出现的己知位置, 预测了它下一次出现的位置. 1883年, Adams 提出了Adams 一Bashforth 和Adams 一Moulton 方法. Rull (1895年)、Heun(1900年)和Kutta (1901年)提出Runge.Kutta 方法.

二十世纪五十年代, Dahlquist 建立了常微分方程数值解法的稳定性理论, 线性多步法是常微分方程初值问题的一种数值方法. 由于通常的数值方法, 其绝对稳定区域是有限的, 不适用于求解刚性常微分的初值问题. 刚性微分方程常常出现于航空、航天、热核反应、自动控制、电子网络及化学动力学等一系列与国防和现代化建设密切相关的高科技领域, 具有无容置疑的重要性. 因此, 刚性微分方程的研究工作早在二十世纪五十年代就开始了, 1965年, 在爱丁堡举行的IFIP 会议后, 更进一步地认识刚性方程的普遍性和重要性. 自从六十年代初, 许多数值分析家致力于探讨刚性问题的数值方法及其理论, 注意到刚性问题对传统数值积分方法所带来的挑战. 这一时期, 人们的研究主要集中在算法的线性稳定性上, 就是基于试验方程y y C λλ=∈,,()数值解的稳定性研究. 在此领域发表了大量的论文, 取得了许多重要的理论成果. 例如, 1963年, Dahlquist 给出A 稳定性理论, 1967年, Widlund 给出()A α—稳定性理论, 1969年, Gear 将A —稳定性减弱, 给出刚性(Stiff )稳定性理论, 并找到了当k 6≤的k 步k 阶的刚性稳定方法, 1969年Dill 找到刚性稳定的7阶和8阶以及1970年Jain 找到刚性稳定的9阶到11阶, 但可用性没有检验. 这些稳定性理论和概念都是在线性试验方程的框架下推导出的, 从严格的数学意义上来说, 这些理论只适用于常系数线性自治系统. 但从实用的观点来说, 这些理论无疑是合理和必要的, 对刚性问题的算法

设计具有重要的指导意义. 在八十至九十年代, 国内也有一些学者研究线性理论, 主要有匡蛟勋、陈果良、项家祥、李寿佛、黄乘明、李庆扬和费景高等.

线性理论虽然对一般问题具有指导作用, 但其不能作为非线性刚性问题算法的稳定性理论研究基础. 为了将线性理论推广到非线性问题中, 人们开始对非线性模型问题进行研究.但是, 早期文献主要致力于数值方法基于经典Lipschitz条件下的经典收敛理论, 即认为良好的稳定性加上经典相容性和经典相容阶就足以描述方法的整体误差性态. 直到1974年, Prothero和Robinson首先注意到算法的经典误差估计由于受刚性问题巨大参数的影响而严重失真, 产生阶降低现象, 这时人们认识到经典收敛理论对于非线性刚性问题以及线性模型的不足. 于是, 1975年, Dahlquist和Butcher分别提出了单支方法和线性多步法的G一稳定概念和B稳定概念. 这两个概念填补了非线性稳定性分析理论, 引起了计算数学家们的极大关注, 在上述理论的基础上, 1975年至1979年, Burrage和Butcher提出了AN一稳定性与BN一稳定性概念, 并相应地建立了基本的B一稳定及代数稳定理论. 1981至1985年, Frank, schneid和ueberhuber建立Runge一kutta方法的B一收敛理论. B稳定与B一收敛理论统称B一理论, 它是常微分方程数值解法研究领域的巨大成就之一, 是刚性问题算法理论的突破性进展, 标志着刚性问题研究从线性向非线性情形深入发展. 国内也有众多学者致力于B一理论的研究, 如李寿佛、曹学年等. 1989年, 李寿佛将Dahlquist的G一稳定概念推广到更一般的(C,P,Q)代数稳定, 克服了G稳定的线性多步法不能超过二阶的限制. 对于一般线性方法, 李寿佛建立了一般线性方法的(K,P,Q)稳定性理论及(K,P,Q)弱代数稳定准则和多步Runge-Kutta法的一系列代数准则. 此外, Dahquist, Butcher和Hairer分别深刻地揭示了单支方法、一般线性方法和Runge.Kutta方法线性与非线性稳定性之间的内在关系. 为了求解刚性微分方程, 不少文献中构造含有稳定参数的线性多步方法, 利用适当选择稳定参数来扩大方法的稳定区域. 所有改进的思想, 都是通过构造一些特殊的显式或隐式线性多步法,

Aα一稳定的α角增大. 八十年代, 就成为国内外学者所使其具有增大的稳定域, 或使()

研究的一个课题, 学者主要有Rodabaugh和Thompson、Feinberg、李旺尧、李寿佛、包雪松、徐洪义、刘发旺、匡蛟勋、项家祥、蒋立新、李庆扬、谢敬东和李林忠等.当前国内外研究刚性问题的一个主要趋势就是在B一理论指导下寻找更为有效的新算法. 另一个发展趋势就是力图突破单边lipschitz常数和内积范数的局限, 建立比B一理论更为普遍的定量分析收敛理论. 近年来, 刚性延迟系统的算法研究成为刚性问题的另一个热点研究领域, 张诚坚将Burrage等人创立的针对刚性常微分系统的B一理论拓展到非线性刚性延迟系统.

常微分方程的数值算法发展到今天己有了线性多步法、龙格一库塔法和在此基础上发展起来的单支方法、分块方法、循环方法、外推法、混合方法、二阶导数法以及各种常用的估校正算法. 其中经常用到的线性多步法公式有Euler 公式、Heun 公式、中点公式、Milne 公式、Adams 公式、simpson 公式、Hamming 公式, Gear 方法、Adams 预估一校正法和Mile 预估一Hamming 校正法公式等, 此外还包含许多迄今尚末探明的新公式. Burage 曾将线性多步法和Runge —Kutta 法比作大海中的两座小岛, 在浩瀚的汪洋之中, 还有许多到现在没有发现的新方法.

本篇文章详细介绍了常微分方程初值问题的一些数值方法, 导出了若干种数值方法, 如Euler 法、改进的欧拉法、显式龙格-库塔法、隐式龙格-库塔法以及线性多步法中的Adams 显隐式公式和预测校正公式, 并且对其稳定性及收敛性作了理论分析. 最后给出了数值例子, 进行了计算机程序算法的分析与实现, 以计算机的速度优势来弥补计算量大的不足. 从得出的结果对比各种方法的优缺点.

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

2.1 数值方法的基本思想

考虑一阶常微分方程初值问题

(,),[,],dx

f x y x a b dy

=∈ 00()y x y = (2.1)

的数值解法, 其中f 是x 和y 的己知函数, 0y 是给定的初始值.

对于常微分方程初值问题(2.1)数值解法, 就是要算出精确解()y x 在区间[,]a b 上的一系列离散节点011n n a x x x x b -=<<<<=的函数值0()y x , 1()y x , ,()n y x 的近似

值0y , 1y ,

, n y .相邻两个节点的间距1i i h x x +=-称为步长, 这时节点也可以表示为

0i x x ih =+(1,2,

,)i n =. 数值解法需要把连续性的问题加以离散化, 从而求出离散节

点的数值解.

通常微分方程初值问题(2.1)的数值方法可以分为两类:

(1) 单步法-----计算()y x 在1n x x +=处的值仅取决于n x 处的应变量及其导数值.

(2) 多步法-----计算()y x 在1n x x +=处的值需要应变量及其导数在1n x +之前的多个网个节点出的值.

2.2 Euler 方法 2.2.1 Euler 公式

若将函数()y x 在点n x 处的导数'()n y x 用两点式代替, 即

'1()()

()n n n y x y x y x h

+-≈

,

再用n y 近似地代替()n y x , 则初值问题(2.1)变为

100(,)

(),0,1,2,

n n n n y y hf x y y y x n +=+??

==

? (2.2) (2.2)式就是著名的欧拉(Euler)公式.

2.2.2 梯形公式

欧拉法形式简单精度低, 为了提高精度, 对方程'

(,)y f x y =的两端在区间

1[,]n n x x +上积分得

11()()[,()]n n

x n n x y x y x f x y x dx ++=+?

(2.3)

改用梯形方法计算其积分项, 即

1

111[,()][(,())(,())]2

n n

x n n

n n n n x x x f x y x dx f x y x f x y x ++++-≈

+?

代入式(2.3), 并用n y 近似代替式中()n y x 即可得到梯形公式

111[(,)(,)]2

n n n n n n h

y y f x y f x y +++=++ (2.4)

由于数值积分的梯形公式比矩形公式精度高, 所以梯形公式(2.4)比欧拉公式(2.2)的精度高一个数值方法.

式(2.4)的右端含有未知的1n y +, 它是关于1n y +的函数方程, 这类方法称为隐式方法.

2.2.3 改进的欧拉公式

梯形公式实际计算时要进行多次迭代, 因而计算量较大. 在实用上, 对于梯形公式(2.4)只迭代一次, 即先用欧拉公式算出1n y +的预估值1n y +, 再用梯形公式(2.4)进行一次迭代得到校正值1n y +, 即

1111(,)[(,)(,)]2

n n n n n n n n n n y y hf x y h

y y f x y f x y ++++?=+?

?=++?? (2.5) 2.2.4 欧拉法的局部截断误差

衡量求解公式好坏的一个主要标准是求解公式的精度, 因此引入局部截断误差和阶数概念.

定义 2.1 在n y 准确的前提下, 即()n n y y x =时, 用数值方法计算1n y +的误差

111()n n n R y x y +++=-, 称为该数值方法计算1n y +时的局部截断误差.

对于欧拉公式, 假定()n n y y x =, 则有

'1()[(,())]()()n n n n n n y y x h f x y x y x hy x +=+=+

而将真解()y x 在n x 处按二阶泰勒展开式有

2'

'''

11()()(),(,)2!

n n n n n h y y x hy x y x x ξξ++=++∈

因此有

2''

11()()2!

n n h y x y y ξ++-=

定义 2.2 若数值方法的局部截断误差为1

()p O h

+, 则称这种数值方法的阶数是P. 步

长(h<1)越小, P 越高, 则局部截断误差越小, 计算精度越高.

2.3 Runge -Kutta 方法

2.3.1 Runge -Kutta 方法的基本思想

欧拉公式可改写成

11

1

(,)n n n n y y hK K f x y +=+??

=?

则1n y +的表达式与1()n y x +的泰勒展开式的前两项完全相同, 即局部截断误差为2()O h .

改进的欧拉公式又可改写成

1

121211

()2

(,)(,)

n n n n n n h y y K K K f x y K f x y hk ++?

=++??

=?

?=+??

. 上述两组公式在形式上有一个共同点: 都是用(,)f x y 在某些点上值的线形组合得出

1()n y x +的近似值1n y +, 而且增加计算(,)f x y 的次数, 可提高截断误差的阶. 如欧拉公式,

每步计算一次(,)f x y 的值, 为一阶方法. 改进的欧拉公式需计算两次(,)f x y 的值, 它是二阶方法. 它的局部截断误差为3()O h .

于是可考虑用函数(,)f x y 在若干点上的函数值的线形组合来构造近似公式, 构造时要求近似公式在(,)n n x y 处的泰勒展开式与解()y x 在n x 处的泰勒展开式的前面几项重合, 从而使近似公式达到所需要的阶数. 既避免求偏导, 又提高了计算方法精度的阶数. 或者说, 在1[,]n n x x +这一步内多预报几个点的斜率值, 然后将其加权平均作为平均斜率. 则可构造出更高精度的计算格式, 这就是Runge -Kutta 方法的基本思想.

2.3.2 Runge -Kutta 方法的构造

一般地, Runge -Kutta 方法设近似公式为 (下面的公式修改了)

1111

1(,)(,)p

n n i i i n n i i n i n ij j j y y h c K K f x y K f x a h y h b K +=-=?

=+?

??

=?

??=++??

∑∑ ()2,3,,i p =

其中i a , ij b , i c 都是参数, 确定它们的原则是使近似公式在m y 处的泰勒展开式与()y x 在

n x 处的泰勒展开式的前面的项尽可能多的重合, 这样就使近似公式有尽可能高的精度. 以

此我们可以通过一个复杂的计算过程得出常用的的三阶和四阶Runge -Kutta 公式

1

123121

3

12(4)6

(,)(,)

22

(,2)

n n n n n n n n h y y K K K K f x y h h K f x y K K f x h y hK hK +?

=+++??

=?

?

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

1

12341213243(22)6

(,)(,)22(,)22(,)n n n n n n n n n n h y y K K K K K f x y h h K f x y K h h

K f x y K K f x h y hK +?

=++++??

=?

??

=++?

?

?=++??

=++??

(2.6) 式(2.6)称为经典Runge -Kutta 方法.

2.4 线性多步法

在逐步推进的求解过程中, 计算1n y +之前事实上已经求出了一系列的近似值0y , 1y , , n y . 如果充分利用前面多步的信息来预测1n y +, 则可期望获得较高的精度, 这就是构造多步法的基本思想.

线性k 步方法的一般公式为

11

10

1

(,)k k n j n j j n j n j j j y a y h b f x y --+---==-=+∑∑ (2.7)

其中j a , j b 均为与n 无关的常数, 110k k a b --+≠. 当10b -=时为显格式; 当10b -≠时为隐格式. 特别当0011,1,0k a b b -====时为Euler 公式;当0011

1,1,2

k a b b -====时为梯形公式.

定义 2.3 称

11

1110

1

()[(,)]k k n n n j n j j n j n j j j R y x y a y h b f x y --+++---==-=-=+∑∑

为k 步公式(2.7)在1n x +处的局部截断误差. 当

11()p n R O h ++=

时称式(2.7)是p 阶的.

应用方程'()(,())y x f x y x =可知局部截断误差也可写成为

11

'1110

1

()[()]k k n n n j n j j n j j j R y x y a y h b y x --+++--==-=-=+∑∑

定义2.4 如果线性k 步方法(2.7)至少是1阶的, 则称是相容的; 如果线性k 步法(2.7)是p 阶的, 则称是p 阶相容的. 2.4.1 Adams 外插法

将微分方程

(,),[,],dx

f x y x a b dy

=∈ 的两端从n x 到1n x +进行积分, 得到

1

1()()(,())n n

x n i x y x y x f x y x dx ++=+?

(2.8)

我们用插值多项式代替右端的被积函数.

Adams 外插法选取k 个点1,1,,,n n n k x x x -=-+作为插值基点构造(,)f x y 的k-1阶多项式

Adams 外插法的计算公式为

1

10

k j n n j m j y y h a f -+==+?∑

其中j a 满足如下代数递推式:

j 12011

1

a 123

1

j j a a a j --+++

+

=+, 0,1,j =

根据此递推公式, 可逐个的计算j

a ()0,1,j =, 表2.1给出了j a 的部分数值:

表2.1

2.4.2 Adams 内插法

根据插值理论知道, 插值节点的选择直接影响着插值公式的精度, 同样次数的内插公式的精度要比外插公式的高.

仍假定已按某种方法求得问题(2.1)的解()y x 在(0,1,)i x i n =处的数值i y , 并选取插

值节点1,

,,

,n k n n p

x x x -++, p 是正整数, 用Lagrang e 型插值多项式()

,1()p n k L x -构造'(,)y f x y =可以导出解初值问题(2.1)的Adams 内插公式:

1

()

1,1

()()()n n

x p n n n k x y x y x L

x dx ++-=+

? (2.9)

当0p =时上式就退化为内插公式.

内插公式(2.9)除了包含f 在1,

,n k n x x -+处的已知值外, 还包含了在点,,n n p x x +,

处的未知值.因此内插公式(2.9)只给出了未知量,,n n p y y +的关系式, 实际计算时仍需要

解联立方程组. 1p =的内插公式是最适用的, (1)

,1()n k L x -采用Newton 向后插值公式得到Adams 内插公式

*10

k

j n n j m j y y h a f +==+?∑

其中系数*

j a 定义为

0*1

(1)j j a d j ττ--??

=- ???

?

0,1,j

=

其中*

j a 满足如下代数递推式:

*

***1201,0

11

10,023

1j j j j a a a a j j --=?+++

+=?

>+?

根据此递推公式, 可逐个的计算*j

a

()0,1,j =, 表2.2给出了*j a 的部分数值:

表2.2

2.5 算法的收敛性和稳定性 2.5.1 相容性

初值问题(2.1):

(,),[,],dx

f x y x a b dy

=∈ 00()y x y =

的显式单步法的一般形式为

1(,,)n n n n y y h x y h ?+=+, 0,1,

,1n N =- (2.10)

其中b a

h N

-=

, n x a nh =+. 这样我们用差分方程初值问题(2.10)的解n y 作为问题(2.1)的解()n y x 在n x x =处的近似值, 即()n n y x y ≈.因此, 只有在问题(2.1)的解使得

()()

(,(),)y x h y x x y x h h

?+--

逼近

'(,())0y f x y x -=

时, 才有可能使(2.10)的解逼近于问题(2.1)的解. 从而, 我们期望对任一固定的[,],x a b ∈ 都有

()()

lim[

(,(),)]0h y x h y x x y x h h

?→+--=

假设增量函数(,,)x y h ?关于h 连续, 则有

(,,)(,)x y h f x y ?=

定义 2.5 若关系式

(,,)(,)x y h f x y ?=

成立, 则称单步法(2.10)与微分方程初值问题(2.1)相容.

容易验证, Euler 法与改进Euler 法均满足相容性条件. 事实上, 对Euler 法, 增量函数为

(,,)(,)x y h f x y ?=

自然满足相容性条件, 改进Euler 法的增量函数为

1

(,,)[(,)(,(,))]2

x y h f x y f x h y hf x y ?=+++

因为(,)f x y , 从而有

1(,,)[(,)(,)](,)2

x y h f x y f x y f x y ?=+=

所以Euler 法与改进Euler 法均与初值问题(2.1)相容. 一般的, 如果显示单步法有p 阶精度(0)p >, 则其局部误差为

1()[()(,(),)]()p y x h y x h x y x h O h ?++-+=

上式两端同除以h , 得10n ε+→令0h →, 如果(,,)x y h ?, 则有

'()(,,)0y x x y h ?-=

(,,)(,)x y h f x y ?=

所以0p >的显示单步法均与初值问题(2.1)相容.由此各阶RK 方法与初值问题(2.1)相容.

2.5.2 收敛性

定义2.6 一种数值方法称为是收敛的, 如果对于任意初值0y 及任意(,],x a b ∈ 都有

lim ()n h y y x →= ()x a nh =+

其中()y x 为初值问题(2.1)的准确解.

按定义, 数值方法的收敛性需根据该方法的整体截断误差1n ε+来判定. 已知Euler 方法的整体截断误差有估计式

()

11()2L b a n hM e O h L

ε-+≤

-= 当0h →,

10n ε+→, 故Euler 方法收敛.

定理 2.1 设显式单步法具有p 阶精度, 其增量函数(,,)x y h ?关于y 满足Lipschitz 条件, 问题(2.1)是精确的, 既00()y x y =, 则显式单步法的整体截断误差为

111()()p n n n y x y O h ε+++=-=.

定理 2.2设增量函数(,,)x y h ?在区域S 上连续, 且关于y 满足Lipschitz 条件时, 则显式单步法收敛的充分必要条件是相容性条件成立, 即

(,,)(,)x y h f x y ?=.

2.5.3 稳定性

定义 2.7 如果存在正常数0h 及C , 使得对任意的初始出发值00,y y , 单步法(2.10)的相应精确解,n n y y , 对所有的00h h <≤, 恒有

00n n y y C y y -≤-, nh b a ≤-

则称单步法是稳定的.

定理2.3若(,,)x y h ?对于[,]x a b ∈, 0(0,]h h ∈以及一切实数y, 关于y 满足Lipschitz 条件, 则单步法(2.7)是稳定的.

定义 2.8对给定的微分方程和给定的步长h, 如果由单步法计算n y 时有大小为δ的误差, 即计算得出n n y y δ=+, 而引起其后之值()m y m n >的变化小于δ, 则说该单步法是绝对稳定的.

一般只限于典型微分方程

'y y μ=

考虑数值方法的绝对稳定性, 其中μ为复常数(我们仅限于μ为实数的情形). 若对于所有的(,)h μαβ∈, 单步法都绝对稳定, 则称(,)αβ为绝对稳定区间.根据以上定义我们可以得出Euler 方法的绝对稳定区间为(-2,0), 梯形公式的绝对稳定区间为(,0)-∞, Runge -Kutta 的绝对稳定区间为(-2.78,0).

3 实例分析

例3.1分别用Euler 法、改进Euler 法、Runge -Kutta 解初值问题

'22(0 1.2)

(0)1y xy x y ?=-≤≤?

=?

的数值解, 取h=0.1, N=10, 并与真实解作出比较.

由于该简单方程可以用数学方法求得其精确描述式2

1

1y x =

+, 所以可以据此检验近似数值解同真实解的误差情况. 对于其他一些结构复杂的常微分方程的数值解实现方法也是一样的.

(1)使用欧拉算法进行一般求解

经过欧拉算法程序计算得出i y 在各点i x 处的近似数值解及各自同精确解的误差, 如下表3.1

表3.1

从实验结果看误差已经不算太小, 况且这还仅仅是一个用于实验的比较简单的常微分方程, 对于实际工程中应用的结构复杂的方程其求解结果的误差要远比此大得多, 由于还存在着局部截断误差和整体截断误差, 因此可采取一定措施来抑制减少误差, 尽量使结果精确.

(2)使用改进欧拉算法进行一般求解

经过改进欧拉算法程序计算得出i y 在各点i x 处的近似数值解及各自同精确解的误差,

如下表3.2

可以看出, 这种经过改进的欧拉算法所存在的误差已大为减少, 误差的减少主要是

由于先利用了欧拉公式对1i y +的值进行了预估, 然后又利用梯形公式对预估值作了校正, 从而在预估—校正的过程中减少了误差. 此算法有一定的优点, 在一些实际而且简单的工程计算中可以直接单独应用.

(3)使用经典Runge -Kutta 法进行一般求解

经过经典Runge -Kutta 法程序计算得出i y 在各点i x 处的近似数值解及各自同精确解的误差, 如下表3.3

表3.3

从表3.3记录的程序运行结果来看, 所计算出来的常微分方程的数值解是非常精确的, 用浮点数进行运算时由近似所引入的误差几乎不会对计算结果产生影响, 这样高的精度是很令人满意的. 无论是从计算速度上还是从计算精度要求上, 都能很好地满足工程计算的需要.

例3.2分别用Euler 法、改进Euler 法、Runge -Kutta 解初值问题

'22(0 1.2)

(0)1y xy x y ?=-≤≤?

=?

的数值解, 取等分数分别为N=12, 24, 36, … ,120, 分别计算出与真实解的最大误差.

(1) 使用欧拉算法进行一般求解

经过计算我们可以得出初值问题在取不通步长时, 数值解与真实解的最大误差如表3.4

表3.4

从表3.4记录的程序运行结果来看当等分数N 变大时, 它的误差正在减小, 根据定义2.6我们可以证得该方法是收敛的. (2)使用改进欧拉算法进行一般求解

经过计算我们可以得出初值问题在取不通步长时, 数值解与真实解的最大误差如表3.5

表3.5

从表3.5记录的程序运行结果来看当等分数N 变大时, 它的误差正在减小, 根据定义2.6我们可以证得该方法是收敛的.

(3)使用经典Runge -Kutta 法进行一般求解

经过计算我们可以得出初值问题在取不通步长时, 数值解与真实解的最大误差如表3.6

表3.6

从表3.6记录的程序运行结果来看当等分数N变大时,它的误差正在减小, 根据定义2.6我们可以证得该方法是收敛的.

(4)收敛速度对比

10-的最小等分为对比以上三种方法的收敛速度, 我们计算出了它们的误差精度达到5

数N如下表3.7

表3.7

从表3.7记录的程序运行结果来看Runge-Kutta法的收敛速度最快, 改进Euler法其次, 而Euler法最差. 由此看来Runge-Kutta法是他们当中最理想的数值解法.

小结

针对工程计算中遇到的常微分方程初值问题的求解, 根据实际情况引如了计算机作为辅助计算工具, 并根据高等数学的有关知识将欧拉公式、改进的欧拉公式、经典龙格-库塔方法等融入到计算机程序算法之中, 充分利用了计算机的速度优势, 大大减轻了工程技术人员的劳动强度, 同时也使计算结果更加可靠、准确。但在实际应用时, 针对不同的工程函数选择合适的求解方法需要有较高的要求, 既要考虑到方法的简易, 又要减少计算量, 同时又不能让截断误差超出指定范围. 一般来说经典龙格-库塔算法精确度高又利于计算机编程实现, 收敛速度快, 稳定性也很好, 可以考虑作为首选实现算法.

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

第8章 常微分方程边值问题的数值解法 引 言 第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.1 一类特殊类型二阶线性常微分方程的边值问题的差分法 设二阶线性常微分方程的边值问题为 (8.2.1)(8.2.2) ()()()(),,(),(), y x q x y x f x a x b y a y b αβ''-=<

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

常微分方程初值问题数值解法 朱欲辉 (浙江海洋学院数理信息学院, 浙江舟山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

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

贵州师范大学数学与计算机科学学院学生实验报告 课程名称: 数值分析 班级: 实验日期: 年 月 日 学 号: 姓名: 指导教师: 实验成绩: 一、实验名称 实验六: 常微分方程初值问题数值解法 二、实验目的及要求 1. 让学生掌握用Euler 法, Runge-Kutta 法求解常微分方程初值问题. 2. 培养Matlab 编程与上机调试能力. 三、实验环境 每人一台计算机,要求安装Windows XP 操作系统,Microsoft office2003、MATLAB6.5(或7.0). 四、实验内容 1. 取步长h=0.1,0.05,0.01, ,用Euler 法及经典4阶Runge-Kutta 法求解初值 问题 ?? ?=≤≤++-=1 )0() 10(2222'y t t t y y 要求: 1) 画出准确解(准确解22t e y t +=-)的曲线,近似解折线; 2) 把节点0.1和0.5上的精确解与近似解比较,观察误差变化情况. 2. 用 Euler 法,隐式Euler 法和经典4阶R-K 法取不同步长解初值问题 ?? ? ??= ∈-=21 )0(],1,0[,50'y x y y 并画出曲线观察稳定性. 注:题1必须写实验报告 五、算法描述及实验步骤 Euler 法: 输入 000),(,,,),,(y a x x h b a y x f = 输出 Euler 解y 步1 ),,2,1(;m n h n a x h a b m n =?+=-? 步2 对1,,2,1,0-=m n 执行),(1n n n n y x f h y y ?+?+

步3 输出T m y y y y ),,,(21 = 经典4阶R-K 法: 输入 000),(,,,),,(y a x x h b a y x f = 输出 4阶R-K 解y 步1 ),,2,1(;m n h n a x h a b m n =?+=-? 步2 对1,,2,1,0-=m n 执行),(1n n y x f K ?,)5.0,(15.02hK y x f K n n +?+, )5.0,(25.03hK y x f K n n +?+,),(314hK y x f K n n +?+ )22(6 43211K K K K h y y n n ++++?+ 步3 输出T m y y y y ),,,(21 = 六、调试过程及实验结果 >> shiyan6 Y1 = 0.8000 0.6620 0.5776 0.5401 0.5441 0.5853 0.6602 0.7662 0.9009 1.0627 Y2 = 0.8287 0.7103 0.6388 0.6093 0.6179 0.6612 0.7366 0.8419 0.9753 1.1353

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

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

常微分方程初值问题

常微分方程初值问题 12.1引言 在数学模型中经常出现的常微分方程在科学的许多分支中同样出现,例如工程和经济学。不幸的是却很少出现这些方程可得到表示在封闭的形式的解的情况,所以通常采用数值方法来寻找近似解。如今,这通常可以非常方便的达到高精度和在解析解和数值逼近之间可靠的误差界。在本节我们将关注一阶微分方程(12.1)形式关于实值函数y的实变 量x的结构和数值分析方法,其中和f是一个给定的实值函数的两个变量。为了从解曲线的无限族选择一个特定的积分构成(12.1)的通解,微分方程将与初始条件一起考虑:给定两个实数和,我们寻求一个(12.1)的解决方案,对于有 (12.2) 微分方程(12.1)与初始条件(12.2)被称为一个初值问题。如果你认为任何(12.1),(12.2)形式的初始值问题具有一个唯一解,看看以下例子。 例12.1考虑微分方程,初始条件,其中α是一个固定的实数,α∈(0,1)。 这是一个关于上述想法的简单验证,对于任何非负实数C, 是初值问题在区间[ 0,∞)上的一个解。因此解的存在性是肯定的,但解不一定唯一;事实上,初始值问题的解有一个无限族,当参数。 我们注意到,在与α∈(0,1)相反的情况下,当α≥1,初值问题,具有唯一解y(x)≡0。 例12.1表明函数f必须遵循相对于它的第二个参数的一定的增长性条件,以保证(12.1),(12.2)有唯一解。精确的保证初始值问题(12.1),(12.2)假设f解的存在惟一基于下面的定理。 定理12.1(Picard theorem)假定实值函数是连续的矩形区域D定义 ;当时;且f 满足Lipschitz条件:存在L>0则 。

常微分方程数值解法

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 。

实验报告七常微分方程初值问题的数值解法

实验报告七常微分方程 初值问题的数值解法 Document number【SA80SAB-SAA9SYT-SAATC-SA6UT-SA18】

浙江大学城市学院实验报告 课程名称 数值计算方法 实验项目名称 常微分方程初值问题的数值解法 实验成绩 指导老师(签名 ) 日期 2015/12/16 一. 实验目的和要求 1. 用Matlab 软件掌握求微分方程数值解的欧拉方法和龙格-库塔方法; 2. 通过实例学习用微分方程模型解决简化的实际问题。 二. 实验内容和原理 编程题2-1要求写出Matlab 源程序(m 文件),并有适当的注释语句;分析应用题2-2,2-3,2-4,2-5要求将问题的分析过程、Matlab 源程序和运行结果和结果的解释、算法的分析写在实验报告上。 2-1 编程 编写用向前欧拉公式和改进欧拉公式求微分方程数值解的Matlab 程序,问题如下: 在区间[],a b 内(1)N +个等距点处,逼近下列初值问题的解,并对程序的每一句添上注释语句。 Euler 法 y=euler(a,b,n,y0,f,f1,b1) 改进Euler 法 y=eulerpro(a,b,n,y0,f,f1,b1) 2-2 分析应用题 假设等分区间数100n =,用欧拉法和改进欧拉法在区间[0,10]t ∈内求解初值问题 ()()20(0)10y t y t y '=-??=? 并作出解的曲线图形,同时将方程的解析解也画在同一张图上,并作比较,分析这两种方法的精度。 2-3 分析应用题 用以下三种不同的方法求下述微分方程的数值解,取10h = 画出解的图形,与精确值比较并进行分析。 1)欧拉法; 2)改进欧拉法; 3)龙格-库塔方法; 2-4 分析应用题 考虑一个涉及到社会上与众不同的人的繁衍问题模型。假设在时刻t (单位为年), 社会上有人口()x t 人,又假设所有与众不同的人与别的与众不同的人结婚后所生后代也是与众不同的人。而固定比例为r 的所有其他的后代也是与众不同的人。如果对所有人来说出生率假定为常数b ,又如果普通的人和与众不同的人的婚配是任意的,则此问题可以用微分方程表示为:

实验报告七 常微分方程初值问题的数值解法

课程名称 数值计算方法 实验项目名称 常微分方程初值问题的数值解法 实验成绩 指导老师(签名 ) 日期 2015/12/16 一. 实验目的和要求 1. 用Matlab 软件掌握求微分方程数值解的欧拉方法和龙格-库塔方法; 2. 通过实例学习用微分方程模型解决简化的实际问题。 二. 实验内容和原理 编程题2-1要求写出Matlab 源程序(m 文件),并有适当的注释语句;分析应用题2-2,2-3,2-4,2-5要求将问题的分析过程、Matlab 源程序和运行结果和结果的解释、算法的分析写在实验报告上。 2-1 编程 编写用向前欧拉公式和改进欧拉公式求微分方程数值解的Matlab 程序,问题如下: 在区间[],a b 内(1)N +个等距点处,逼近下列初值问题的解,并对程序的每一句添上注释语句。 0(,)()y f x y a x b y a y '=≤≤= Euler 法 y=euler(a,b,n,y0,f,f1,b1) 改进Euler 法 y=eulerpro(a,b,n,y0,f,f1,b1) 2-2 分析应用题 假设等分区间数100n =,用欧拉法和改进欧拉法在区间[0,10]t ∈内求解初值问题 ()()20 (0)10 y t y t y '=-?? =? 并作出解的曲线图形,同时将方程的解析解也画在同一张图上,并作比较,分析这两种方法的精度。 2-3 分析应用题 用以下三种不同的方法求下述微分方程的数值解,取10h =

201 (0)1 y y x x y '=+≤≤?? =? 画出解的图形,与精确值比较并进行分析。 1)欧拉法; 2)改进欧拉法; 3)龙格-库塔方法; 2-4 分析应用题 考虑一个涉及到社会上与众不同的人的繁衍问题模型。假设在时刻t (单位为年),社会上有人口()x t 人,又假设所有与众不同的人与别的与众不同的人结婚后所生后代也是与众不同的人。而固定比例为r 的所有其他的后代也是与众不同的人。如果对所有人来说出生率假定为常数b ,又如果普通的人和与众不同的人的婚配是任意的,则此问题可以用微分方程表示为: () (1())dp t rb p t dt =- 其中变量()()()i p t x t x t =表示在时刻t 社会上与众不同的人的比例,()i x t 表示在时刻t 人口中与众不同的人的数量。 1)假定(0)0.01,0.02p b ==和0.1r =,当步长为1h =年时,求从0t =到50t =解()p t 的近似值,并作出近似解的曲线图形。 2)精确求出微分方程的解()p t ,并将你当50t =时在分题(b)中得到的结果与此时的精确值进行比较。 【MATLAB 相关函数】 求微分方程的解析解及其数值的代入 dsolve(‘egn1’, ‘egn2’,L ‘x ’) subs (expr, {x,y,…}, {x1,y1,…} ) 其中‘egn i ’表示第i 个方程,‘x ’表示微分方程中的自变量,默认时自变量为t 。 subs 命令中的expr 、x 、y 为符合型表达式,x 、y 分别用数值x1、x2代入。 >> syms x y z >> subs('x+y+z',{x,y,z},{1,2,3}) ans = 6 >> syms x >> subs('x^2',x,2) ans = 4 >> s=dsolve(‘12Dy y ∧=+’, ‘(0)1y =’, ‘x ’) ans = tan(14)x pi -*

常微分方程初值问题答案

1.(10分)对常微分方程初值问题(0)1(01) dy y dx y x ?=-???=≤≤? 取步长0.1,h = 分别用改进的Euler 法和标准的四阶Runge-Kutta 法作数值计算,写出公式和简要推导过程,并把结果填入表内。 解:(1) 改进的Euler 方法: 代入公式得10.905n n y y +=,即0.905n n y = …2分 (2)标准的四阶Runge-Kutta 方法: 1 12341213 2430.1(22)0.90483756 (0.05)0.95(0.05)0.9525(0.1)0.90475n n n n n n n n n n y y k k k k y k y k y k y k y k y k y k y +?=++++=?? =-?? =-+=-??=-+=-??=-+=-?? 即0.9048375n n y = ……(4分) 2. 对常微分方程初值问题12 (0)1(01) dy y dx y x ?=-???=≤≤? 取步长0.1,h = 分别用改进的Euler 法和标准的四阶Runge-Kutta 法作数值计算,写出公式和推导过程,并把结果填入表内。

解:(1) 改进的Euler 方法: 代入公式得10.95125n n y y +=,即0.95125n n y = ……………….(2分) (2)标准的四阶Runge-Kutta 方法: 1 12341213 2430.1(22)0.9512196 /2(0.05)/20.4875(0.05)/20.4878125(0.1)/20.47622n n n n n n n n n n y y k k k k y k y k y k y k y k y k y k y +?=++++=?? =-?? =-+=-??=-+=-??=-+=-?? 即0.95145314n n y =……(4分) 《数值分析》复习题 一、填空题 1.绝对误差限=末位的一半+单位,相对误差限=绝对误差限/原值*100% 1. 度量一根杆子长250厘米,则其绝对误差限为 ,相对误差限是 。 2. 测量一支铅笔长是16cm , 那么测量的绝对误差限是 ,测量的相对误差限是 。 3. 称量一件商品的质量为50千克,则其绝对误差限为 ,相对误差限是 。 2.利用平方差的方法 4. 在数值计算中,当a _____________

常微分方程数值解法

第八章 常微分方程数值解法 考核知识点: 欧拉法,改进欧拉法,龙格-库塔法,单步法的收敛性与稳定性。 考核要求: 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≤

常微分方程的数值解

实验4 常微分方程的数值解 【实验目的】 1.掌握用MATLAB软件求微分方程初值问题数值解的方法; 2.通过实例用微分方程模型解决简化的实际问题; 3.了解欧拉方法和龙格-库塔方法的基本思想和计算公式,及稳定性等概念。 【实验内容】 题3 小型火箭初始重量为1400kg,其中包括1080kg燃料。火箭竖直向上发射时燃料燃烧率为18kg/s,由此产生32000N的推力,火箭引擎在燃料用尽时关闭。设火箭上升时空气阻力正比于速度的平方,比例系数为0.4kg/m,求引擎关闭瞬间火箭的高度、速度、加速度,及火箭到达最高点的时的高度和加速度,并画出高度、速度、加速度随时间变化的图形。 模型及其求解 火箭在上升的过程可分为两个阶段,在全过程中假设重力加速度始终保持不变,g=9.8m/s2。 在第一个过程中,火箭通过燃烧燃料产生向上的推力,同时它还受到自身重力(包括自重和该时刻剩余燃料的重量)以及与速度平方成正比的空气阻力的作用,根据牛顿第二定律,三个力的合力产生加速度,方向竖直向上。因此有如下二式: a=dv/dt=(F-mg-0.4v2)/m=(32000-0.4v2)/(1400-18t)-9.8 dh/dt=v 又知初始时刻t=0,v=0,h=0。记x(1)=h,x(2)=v,根据MATLAB 可以求出0到60秒内火箭的速度、高度、加速度随时间的变化情况。程序如下: function [ dx ] = rocket( t,x ) a=[(32000-0.4*x(2)^2)/(1400-18*t)]-9.8; 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=[(32000-0.4*(v.^2))./(1400-18*t)]-9.8; [t,h,v,a]; 数据如下: t h v a 0 0 0 13.06 1.00 6.57 13.19 13.30 2.00 26.44 26.58 1 3.45 3.00 59.76 40.06 13.50 4.00 106.57 53.54 13.43 5.00 16 6.79 66.89 13.26 6.00 240.27 80.02 12.99 7.00 326.72 92.83 12.61 8.00 425.79 105.22 12.15 9.00 536.99 117.11 11.62 10.00 659.80 128.43 11.02 11.00 793.63 139.14 10.38 12.00 937.85 149.18 9.71 13.00 1091.79 158.55 9.02 14.00 1254.71 167.23 8.33 15.00 1425.93 175.22 7.65 16.00 1604.83 182.55 6.99 17.00 1790.78 189.22 6.36 18.00 1983.13 195.27 5.76 19.00 2181.24 200.75 5.21 20.00 2384.47 205.70 4.69 21.00 2592.36 210.18 4.22 22.00 2804.52 214.19 3.79 23.00 3020.56 217.79 3.41 24.00 3240.08 221.01 3.07 25.00 3462.65 223.92 2.77 26.00 3687.88 226.56 2.50 27.00 3915.58 228.97 2.27

常微分方程数值解法

第八章 常微分方程的数值解法 一.内容要点 考虑一阶常微分方程初值问题:?????==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. 根据实际要求确定要研究的量(自变量、未知函数、必要的参数等)并确定坐标系。 2. 找出这些量所满足的基本规律(物理的、几何的、化学的或生物学的等等)。 3. 运用这些规律列出方程和定解条件。基本模型 1. 发射卫星为什么用三级火箭 2. 人口模型 3. 战争模型 4. 放射性废料的处理通常需要求出方程的解来说明实际现象,并加以检验。如果能得到解析形式的解固然是便于分析和应用的,但是我们知道,只有线性常系数微分方程,并且自由项是某些特殊类型的函数时,才可以得到这样的解,而绝大多数变系数方程、非线性方程都是所谓“解不出来” 的于是对于用微分方程解决实际问题来说,数值解法就是一个十分重要的手段。 1. 改进Euler 法: 2. 龙格—库塔( Runge—Kutta )方法: 【源程序】 1. 改进Euler 法: function [x,y]=eulerpro(fun,x0,x1,y0,n);%fun 为函数,(xO, x1)为x 区间,yO 为初始值,n 为子 区间个数 if nargin<5,n=5O;end h=(x1-xO)/n; x(1)=xO;y(1)=yO; 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=i nlin e('-2*y+2*x A2+2*x') [x,y]=eulerpro(f,O,,1,1O) 2 x +2x , (0 < x < , y(0) = 1 求解函数y'=-2y+2 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算法。 ode45表示采用四阶-五阶Runge-Kutta算法,它用4阶方法提供候选解,5阶方法控制误差,是一种自适应步长(变步长)的常微分方程数值解法,其整体截断误差为(△ 口人5解 决的是Nonstiff(非刚性)常微分方程。

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

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

常微分方程数值解法的误差分析

淮北师范大学 2013届学士学位论文 常微分方程数值解法的误差分析 学院、专业数学科学学院数学与应用数学 研究方向计算数学 学生姓名李娜 学号 20091101070 指导教师姓名陈昊 指导教师职称讲师 年月日

常微分方程数值解法的误差分析 李娜 (淮北师范大学数学科学学院,淮北,235000) 摘要 自然界与工程技术中的很多现象,往往归结为常微分方程定解问题。许多偏微分方程问题也可以化为常微分方程问题来近似求解。因此,研究常微分方程的数值解法是有实际应用意义的。数值解法是一种离散化的数学方法,可以求出函数的精确解在自变量一系列离散点处的近似值。随着计算机计算能力的增强以及数值计算方法的发展,常微分方程的数值求解方法越来越多,比较成熟的有Euler 法、后退Euler法、梯形方法、Runge—Kutta方法、投影法和多步法,等等.本文将对这些解的误差进行分析,以求能够得到求解常微分数值解的精度更好的方法。 关键词:常微分方程, 数值解法, 单步法, 线性多步法, 局部截断误差

Error Analysis of Numerical Method for Solving the Ordinary Differential Equation Li Na (School of Mathematical Science, Huaibei Normal University, Huaibei, 235000) Abstract In nature and engineering have many phenomena , definite solution of the problem often boils down to ordinary differential equations. So study the numerical solution of ordinary differential equations is practical significance. The numerical method is a discrete mathematical methods, and exact solution of the function can be obtained in the approximation of a series of discrete points of the argument.With the enhanced computing power and the development of numerical methods,ordinary differential equations have more and more numerical solution,there are some mature methods. Such as Euler method, backward Euler method, trapezoidal method, Runge-Kutta method, projection method and multi-step method and so on.Therefore, numerical solution of differential equation is of great practical significance. Through this paper, error of these solutions will be analyzed in order to get a the accuracy better way to solve the numerical solution of ordinary differential. Keywords:Ordinary differential equations, numerical solution methods, s ingle ste p methods, l inear multi-step methods, local truncation error

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

--------学习小结 一、本章学习体会 通过本章的学习,我了解了常微分方程初值问题的计算方法,对于解决那些很难求解出解析表达式的,甚至有解析表达式但是解不出具体的值的常微分方程非常有用。在这一章里求解常微分方程的基本思想是将初值问题进行离散化,然后进行迭代求解。在这里将初值问题离散化的方法有三种,分别是差商代替导数的方法、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 ++==- 显示单步法 7.2.1 显示单步法的一般形式 1(,,),(0,1,...,1)n n n n y y h t y h n M ?+=+=- 定理7.2.1 设增量函数(,,)n n t y h ?在区域00{(,,)|,||,0}D t y h t t T y h h =≤≤<∞≤≤内

相关文档
最新文档