08第二版 第八章 常微分方程数值解法
常微分方程的数值解法

常微分方程的数值解法在自然科学的许多领域中,都会遇到常微分方程的求解问题。
然而,我们知道,只有少数十分简单的微分方程能够用初等方法求得它们的解,多数情形只能利用近似方法求解。
在常微分方程课中已经讲过的级数解法,逐步逼近法等就是近似解法。
这些方法可以给出解的近似表达式,通常称为近似解析方法。
还有一类近似方法称为数值方法,它可以给出解在一些离散点上的近似值。
利用计算机解微分方程主要使用数值方法。
我们考虑一阶常微分方程初值问题⎪⎩⎪⎨⎧==00)(),(yx 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 可以不相等,但一般取成相等的,这时na 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 hx y x y =≈-(9.3)记 ,n ,,i x y y i i 10 )(== 从而我们可以取),(0001y x hf y y ==作为y (x 1)的近似值。
常微分方程的数值解法的原理

常微分方程的数值解法的原理
常微分方程的数值解法是一种解决常微分方程初值问题的方法,其基本原理是:先取自变量的一系列离散点,把微分问题离散化,求出离散问题的数值解,以此作为微分问题解的近似。
具体步骤如下:
1、假定解存在且唯一,解函数y(x)及右端函数?(x,y)具有所需的光滑
程度。
2、取步长h>0,以h剖分区间【α,b】,令xi=α+ih,把微分方程离散化成
一个差分方程。
3、以y(x)表微分方程初值问题的解,以yi表差分问题的解,就是近似解
的误差,称为全局误差。
4、设计各种离散化模型,求出近似解,估计误差以及研究数值方法的稳定性
和收敛性等。
第8章常微分方程数值解法

的解为
y ( x) e
x2
x 0
e dt
t2
但要计算它的值,还需要用数值积分的方法。如果要 对许多个 x 值计算解 y(x) 的近似值,那么工作量非常大。况 且实际计算不一定要求解析表达式,而是只需求在某些点 上满足精度的解的近似值或解的近似表达式就可以了。
由于高阶常微分方程可以转化为一阶常微分方程组,因 此,为了不失一般性,本章主要介绍一类一阶常微分方程初 值问题
的解来近似微分方程初值问题(8.2)的解,其 中 h (b- a) / 2 ,式(8.3)也称为欧拉公式。
欧拉法的几何意义是用一条自点 ( x0 , y0 ) 出发的 折线去逼近积分曲线 y f (x) ,如图8.1所示。 因此,这种方法又称为折线法。显然,欧拉法 简单地取折线的端点作为数值解,精度非常差。
float euler(float x0,float xn,float y0,int N) { float x,y,h; int i; x=x0; y=y0; h=(xn-x0)/(float)N; /* 计算步长 */ for(i=1;i<=N;i++) /* 欧拉公式 */ { y=y+h*func(x,y); x=x0+i*h; } return(y); }
8.4 龙格—库塔(Runge-Kutta)法 8.4.1 龙格—库塔法的基本思想
在欧拉法 yi 1 yi h f ( xi , yi ) (i 0,1,) 中,用解函数 y f (x) 在 点 x i 处的斜率 f ( xi , y i ) 计算从 yi 到 y i 1 的增量,y i 1 的表达式 与 y( xi 1 ) 的Taylor展开式的前二项相等,使方法只有一阶精度。 改进的欧拉法用两个点 x i ,x i 1 处的斜率 f ( xi , y i )、f ( xi 1 , yi 1 ) 的平均值计算增量,使方法具有二阶精度,即 y i 1 的表达式 与 y( xi 1 ) 的Taylor展开式的前三项相等。 由此龙格和库塔提出了一种间接地运用Taylor公式的方法, y (x) 即利用 在若干个待定点上的函数值和导数值做出线性组 合式,选取适当系数使这个组合式进行Taylor展开后与 y( xi 1 ) 的Taylor展开式有较多的项达到一致,从而得出较高阶的数 值公式,这就是龙格—库塔法的基本思想。
第八章常微分方程的数值解法

y( xn1 )
15
Euler法的收敛性
称初值问题(8.1.1)的数值解法是收敛的,如:
h0 ( n )
lim yn y ( x)
其中: x xn x0 nh , x [ x0 , b]
16
例考察以下初值问题Euler法的收敛性
dy y dx y (0)=y0 ( 0)
★
可得: h (k ) ( k 1) y y | f ( xn 1 , yn ) f ( x , y 1 n 1 n 1 ) | 2 hL ( k ) hL k 1 (1) ( k 1) (0) | yn 1 yn 1 | ( ) | yn 1 yn 1 | 2 2 hL k 1 ( k 1) 从而 : lim( ) 0 , 故有 lim yn 1 y n 1 。 k 2 k
★
由y0=y( x0 ), 假定yn=y( xn ), 往证:
y0 yn 1 y ( xn 1 ) xn 1; x0
14
证明
yn yn1 yn hf ( xn , yn ) yn h xn 1 1 yn (1 h ) y( xn )(1 h ) xn xn y0 y0 1 xn (1 h ) ( xn h) x0 xn x0 y0 xn 1 x0
8
局部截断误差
假设第n步在点xn的值计算没有误差,即yn y( xn ), 由单步法计算出yn1 , 则
Tn1 y( xn1 ) yn1 称为点xn1上的局部截断误差.
从初值y( x0 ) y0出发,由单步法显式或隐式 逐步计算,得xn 1的值yn 1 , 则
n1 y( xn1 ) yn1
常微分方程的数值解法

常微分方程的数值解法1. 引言常微分方程是自变量只有一个的微分方程,广泛应用于自然科学、工程技术和社会科学等领域。
由于常微分方程的解析解不易得到或难以求得,数值解法成为解决常微分方程问题的重要手段之一。
本文将介绍几种常用的常微分方程的数值解法。
2. 欧拉方法欧拉方法是最简单的一种数值解法,其具体步骤如下:- 将自变量的区间等分为n个子区间;- 在每个子区间上假设解函数为线性函数,即通过给定的初始条件在每个子区间上构造切线;- 使用切线的斜率(即导数)逼近每个子区间上的解函数,并将其作为下一个子区间的初始条件;- 重复上述过程直至达到所需的精度。
3. 改进的欧拉方法改进的欧拉方法是对欧拉方法的一种改进,主要思想是利用两个切线的斜率的平均值来逼近每个子区间上的解函数。
具体步骤如下: - 将自变量的区间等分为n个子区间;- 在每个子区间上构造两个切线,分别通过给定的初始条件和通过欧拉方法得到的下一个初始条件;- 取两个切线的斜率的平均值,将其作为该子区间上解函数的斜率,并计算下一个子区间的初始条件;- 重复上述过程直至达到所需的精度。
4. 二阶龙格-库塔方法二阶龙格-库塔方法是一种更为精确的数值解法,其基本思想是通过近似计算解函数在每个子区间上的平均斜率。
具体步骤如下: - 将自变量的区间等分为n个子区间;- 在每个子区间上计算解函数的斜率,并以该斜率的平均值近似表示该子区间上解函数的斜率;- 利用该斜率近似值计算下一个子区间的初始条件,并进一步逼近解函数;- 重复上述过程直至达到所需的精度。
5. 龙格-库塔法(四阶)龙格-库塔法是目前常用的数值解法之一,其精度较高。
四阶龙格-库塔法是其中较为常用的一种,其具体步骤如下:- 将自变量的区间等分为n个子区间;- 在每个子区间上进行多次迭代计算,得到该子区间上解函数的近似值;- 利用近似值计算每个子区间上的斜率,并以其加权平均值逼近解函数的斜率;- 计算下一个子区间的初始条件,并进一步逼近解函数;- 重复上述过程直至达到所需的精度。
常微分方程的数值解法(欧拉法、改进欧拉法、泰勒方法和龙格库塔法)

[例1]用欧拉方法与改进的欧拉方法求初值问题h 的数值解。
在区间[0,1]上取0.1[解]欧拉方法的计算公式为x0=0;y0=1;x(1)=0.1;y(1)=y0+0.1*2*x0/(3*y0^2);for n=1:9x(n+1)=0.1*(n+1);y(n+1)=y(n)+0.1*2*x(n)/(3*y(n)^2);end;xy结果为x =Columns 1 through 80.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 Columns 9 through 100.9000 1.0000y =Columns 1 through 81.0000 1.0067 1.0198 1.0391 1.0638 1.0932 1.1267 1.1634 Columns 9 through 101.2028 1.2443改进的欧拉方法其计算公式为本题的精确解为()y x=x0=0;y0=1;ya(1)=y0+0.1*2*x0/(3*y0^2);y(1)=y0+0.05*(2*x0/(3*y0^2)+2*x0/(3*ya^2));for n=1:9x(n+1)=0.1*(n+1);ya(n+1)=ya(n)+0.1*2*x(n)/(3*ya(n)^2);y(n+1)=y(n)+0.05*(2*x(n)/(3*y(n)^2)+2*x(n+1)/(3*ya(n+1)^2));end;xy结果为x =Columns 1 through 80.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 Columns 9 through 100.9000 1.0000y =Columns 1 through 81.0000 1.0099 1.0261 1.0479 1.0748 1.1059 1.1407 1.1783 Columns 9 through 101.2183 1.2600[例2]用泰勒方法解x=0.1, 0.2, …, 1.0处的数值解,并与精确解进行比较。
常微分方程组数值解法

常微分方程组数值解法一、引言常微分方程组是数学中的一个重要分支,它在物理、工程、生物等领域都有广泛应用。
对于一些复杂的常微分方程组,往往难以通过解析方法求解,这时候数值解法就显得尤为重要。
本文将介绍常微分方程组数值解法的相关内容。
二、数值解法的基本思想1.欧拉法欧拉法是最基础的数值解法之一,它的思想是将时间连续化,将微分方程转化为差分方程。
对于一个一阶常微分方程y'=f(x,y),其欧拉公式为:y_{n+1}=y_n+hf(x_n,y_n)其中h为步长,x_n和y_n为第n个时间点上x和y的取值。
2.改进欧拉法改进欧拉法是对欧拉法的改良,其公式如下:y_{n+1}=y_n+\frac{h}{2}[f(x_n,y_n)+f(x_{n+1},y_n+hf(x_n,y_n))] 3.四阶龙格-库塔方法四阶龙格-库塔方法是目前最常用的数值解法之一。
其公式如下:k_1=f(x_n,y_n)k_2=f(x_n+\frac{h}{2},y_n+\frac{h}{2}k_1)k_3=f(x_n+\frac{h}{2},y_n+\frac{h}{2}k_2)k_4=f(x_n+h,y_n+hk_3)y_{n+1}=y_n+\frac{h}{6}(k_1+2k_2+2k_3+k_4)其中,k_i为中间变量。
三、常微分方程组的数值解法1.欧拉法对于一个二阶常微分方程组:\begin{cases} y'_1=f_1(x,y_1,y_2) \\ y'_2=f_2(x,y_1,y_2)\end{cases}其欧拉公式为:\begin{cases} y_{n+1,1}=y_{n,1}+hf_1(x_n,y_{n,1},y_{n,2}) \\y_{n+1,2}=y_{n,2}+hf_2(x_n,y_{n,1},y_{n,2}) \end{cases}其中,x_n和y_{n,i}(i=1, 2)为第n个时间点上x和y_i的取值。
常微分方程的数值解法

常微分方程的数值解法常微分方程是研究变量的变化率与其当前状态之间的关系的数学分支。
它在物理、工程、经济等领域有着广泛的应用。
解常微分方程的精确解往往十分困难甚至不可得,因此数值解法在实际问题中起到了重要的作用。
本文将介绍常见的常微分方程的数值解法,并比较其优缺点。
1. 欧拉方法欧拉方法是最简单的数值解法之一。
它基于近似替代的思想,将微分方程中的导数用差商近似表示。
具体步骤如下:(1)确定初始条件,即问题的初值。
(2)选择相应的步长h。
(3)根据微分方程的定义使用近似来计算下一个点的值。
欧拉方法的计算简单,但是由于误差累积,精度较低。
2. 改进欧拉方法为了提高欧拉方法的精度,改进欧拉方法应运而生。
改进欧拉方法通过使用两个点的斜率的平均值来计算下一个点的值。
具体步骤如下:(1)确定初始条件,即问题的初值。
(2)选择相应的步长h。
(3)根据微分方程的定义使用近似来计算下一个点的值。
改进欧拉方法相较于欧拉方法而言,精度更高。
3. 龙格-库塔法龙格-库塔法(Runge-Kutta)是常微分方程数值解法中最常用的方法之一。
它通过迭代逼近精确解,并在每一步中计算出多个斜率的加权平均值。
具体步骤如下:(1)确定初始条件,即问题的初值。
(2)选择相应的步长h。
(3)计算各阶导数的导数值。
(4)根据权重系数计算下一个点的值。
与欧拉方法和改进欧拉方法相比,龙格-库塔法的精度更高,但计算量也更大。
4. 亚当斯法亚当斯法(Adams)是一种多步法,它利用之前的解来近似下一个点的值。
具体步骤如下:(1)确定初始条件,即问题的初值。
(2)选择相应的步长h。
(3)通过隐式或显式的方式计算下一个点的值。
亚当斯法可以提高精度,并且比龙格-库塔法更加高效。
5. 多步法和多级法除了亚当斯法,还有其他的多步法和多级法可以用于解常微分方程。
多步法通过利用多个点的值来逼近解,从而提高精度。
而多级法则将步长进行分割,分别计算每个子问题的解,再进行组合得到整体解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5 1.0 2.9766 3.4366 0.4600
(2)由隐式欧拉公式(8.6),得
yi yi1 0.2(xi yi ), i 1, 2, ,5
整理,得
yi (0.2xi yi1) / 0.8, i 1, 2, ,5
计算结果见下表 (表8-2):
i xi yi y( xi ) y(xi) yi
,
yi1
)
f (xi, yi )],
i
1, 2,
, n (8.7)
上式称为常微分方程初值问题(8.1)~(8.2)的梯形公式.
另外,将微分程(8.1)两端从 xi1 到 xi 积分,得
xi y(x)dx xi f (x, y(x))dx
xi1
xi1
上式右端积分用梯形公式近似,即
xi xi1
y(x) 在自变量 x的一系列离散节点
a x0 x1 x2 xn1 xn b
上的近似值
y0, y1, y2, , yn1, yn
这些近似值称为初值问题(8.1)~(8.2)的数值解.
相邻两节点的间距 hi xi xi1 (i 1, 2, , n) 称为步长 ,通常在计算上采用相等的步长hi h (i 1, 2, , n) , 这时等 距节点 xi x0 ih, (i 1,2, ,n) .求解过程是顺着节点排列的顺序
8.1.3 微分方程单步法的局部截断误差与阶
前面几节介绍了求解初值问题(8.1)~(8.2)数值解的几种方
法.显然,各种数值方法得到的数值解 yi 与解析解 y(xi )之间
的差异各不相同.称
ei y(xi ) yi 为某方法在 xi 处的整体截断误差.显然,该误差依赖于前面
xi1, xi2 , , x0
由梯形公式(8.7),得
yi yi1 0.1[(xi1 yi1) (xi yi )] i 1, 2, ,5
整理,得
yi [0.1(xi1 xi ) 1.1yi1] / 0.9 i 1, 2, ,5
计算结果如下:
i
0
xi yi y( xi ) y(xi) yi
0 1.0000 1.0000
y(x) 2ex x 1 相比较.
解 根据已知条件,有
n 5, h 0.2
x0 0, y0 1 xi ih, i 1, 2, , n
又
f (x, y) x y
(1)由显式欧拉公式(8.5),得
yi yi1 0.2(xi1 yi1), i 1, 2, , 5
整理,得
yi 0.2xi1 1.2yi1,i 1, 2, ,5
y(x) x y, 0 x 1
y(0)
1
取 h 0.2 ,试用改进欧拉公式求其数值解,并与精确解
y(x) 2ex x 1 相比较.
解 根据已知条件,有
n 5, h 0.2
x0 0, y0 1
xi ih, i 1, 2, , n
又
f (x, y) x y
根据改进的欧拉公式(8.8),有
一步一步的向前推进,初值问题的数值解法主要建立这种递推 公式.
求解常微分方程初值问题的数值解法可分为两类:单步法和多 步法.单步法在计算 yi 时只用到前面一步 yi1 处的信息,如
欧拉(Euler)法、龙格—库塔(Runge-Kutta)法.多步法在计算 yi 时用到前面多步 yi1, yi2 , 处的信息,常用的主要是线性多
,又可得
yi yi1 hf (xi1, yi1), i 1, 2, , n
(8.5)
及
yi yi1 hf (xi , yi ), i 1, 2, , n (8.6)
(8.5)、(8.6)式称为欧拉公式.其中(8.5)式称为显式欧拉公式, (8.6)式称为隐式欧拉公式.利用欧拉公式求解初值问题(8.1)~ (8.2)数值解的方法称为欧拉法.
第八章常微分方程数值解法
• 8.1 欧拉法 • 8.2 龙格-库塔法 • 8.3 线性多步法 • 8.4 一阶微分方程组与高阶微分方程的数值解法
在科学研究和工程技术中,常会遇到常微分方程或常微分 方程组的求解问题.我们知道,除了几种简单类型的常微分方 程外,要找出解的解析表达式是极其困难的,甚至是不可能 的.因此,研究各种类型常微分方程的数值解法是很有必要 的.本章主要考虑一阶常微分方程初值问题
步法.
单步法与多步法都有显式格式与隐式格式之分.
§8.1欧拉法
8.1.1 欧拉公式
设初值问题(8.1)~(8.2)的精确解为y(x)在区间[a,b] 上取一
系列等距节点
a x0 x1 x2 xn b
根据导数定义,可以用
y(xi ) y(xi1) h
近似代替
y(xi1)
或
y(xi () 图8-1),其中 h
f (x, y1) f (x, y2) L y1 y2 .
对任何 y1, y2 均成立,则上述初值问题(7.1)~(7.2)的解存在、 惟一,且连续依赖于初值 y0.
由于李普希茨条件较难验证,因此在实际应用中,常用函
数 f (x, y) 在所考虑区域 G 上对 y 存在连续偏导数条件代替.事
实上,若 f (x, y) 在有解闭区域 G 上对 y 存在连续偏导数,则 f
计算结果见下表 (表8-1):
i xi yi y(xi ) y(xi ) yi
0 0 1.0000 1.0000 0.0000
表8-1
1
2
3
0.2
0.4
0.6
1.2000 1.4800 1.8560
1.2428 1.5836 2.0442
0.04.6511 0.3039
此当函数 f (x, y) 比较复杂时从(8.7)式中解出yi 还是十分困难.
能否找到一种公式,既能提高精度,又可避免从代数方程
中求解 yi 这一繁琐过程呢?改进的欧拉公式正好满足这些要
求.
在实际应用中,首先利用显式欧拉公式(8.5)计算 yi 的 一个初值 yi (称为预测值),再用梯形公式对yi 进行校正
b a .于是, n
根据微分方程(8.1)可得
y(xi ) y(xi1) h
f
(xi1, yi1),
(8.3)
i 1, 2, , n
或
y(xi ) y(xi1) h
f (xi , yi ),
i 1, 2, , n
(8.4)
设 yi ,yi1 分别为精确解 y(xi1), y(xi ) 的近似值,则由(8.3)、(8.4)式
y(i1) h2 ,
2!
i1 在 xi1 与 xi 之间
将 y(x) 在 xi 点处展开,有
y(x)
y(xi )
y(xi )(x
xi )
y( ) (x
2!
xi )2 ,
在x与 xi 之间
令 x xi1 ,得
y( xi 1 )
y(xi )
y(xi )h
y(i )
2!
h2
y(xi )
f
(xi , y(xi ))h
dy
dx
f (x, y), a
xb
y(a) y0
(8.1) (8.2)
在区间[a, b]上的解. 为了保证初值问题(8.1)~(8.2)解的存在和惟 一性,给出如下定理(证明略).
定理8.1 若 f (x, y) 连续,且关于 y 满足李普希兹(Lipschitz)条
件,即存在常数 L 0 ,使
各步的计算.为了简化分析,我们仅讨论向前推进一步所产 生的误差,因此有如下定义.
定义8.1 利用数值方法求解微分方程的近似解时,假定 yi1 的 计算没有误差,即 yi1 y(xi1) ,则称 y(xi ) yi 为局部截断误
差.
定义8.2 如果对某种数值方法,存在正整数p,使其局部截断误
8.1.2 改进欧拉公式
根据(8.3),(8.4)式,令
y(xi ) y(xi1) f (xi1, yi1) f (xi , yi )
h
2
整理,得
yi
yi1
h[ 2
f
(xi1,
yi1)
f
( xi ,
yi )]
所以,通过取显示欧拉公式和隐式欧拉公式的算术平均值,
得
yi
yi1
h 2
[
f
(
xi1
y(i ) h2 ,
2!
在 xi1 与 xi 之间
当h xi xi1 充分小时,忽略二阶导数项,并以近似值 yi1, yi 代替精确值 y(xi1), y(xi ),同样可得欧拉公式(8.5)、(8.6).
例8.1 设有初值问题
y(x) x y, 0 x 1
y(0)
1
取 h 0.2 ,试用梯形公式求其数值解,并与精确解
0
1 0.2 1.2444 1.2428 -0.0016
2 0.4 1.5877 1.5836 -0.0041
3 0.6 2.0516 2.0442 -0.0074
4 0.8 2.6630 2.6511 -0.0119
5 1.0 3.4548 3.4366 -0.0182
将例8.2与例8.1 (1)、(2)对比,可以看出梯形公式比欧拉公 式的精度明显提高.但由于梯形公式(8.7)仍然是隐式公式,因
,就可得到所谓改进的欧拉公式
yi
yi1
hf
( xi 1 ,
yi 1 )
,i 1, 2,
h
yi
yi1
[ 2
f
( xi 1 ,
yi1)
f
(xi ,
yi )]
, n (8.8)
(8.8)式中的第一式称为预测算式,用来得到精度较低的预测值 ;第二式称为校正算式,用来得到较高精度的校正值.