第七章 常微分方程模型的数值解法
第七章 常微分方程模型的数值解法
第七章 常微分方程数值解法简介微分方程在科学和工程技术中有很广泛的应用。
许多实际问题的数学模型都可以用微分方程来描述,归结为常微分方程的定解问题;很多偏微分方程问题,也可以化为常微分方程问题来近似求解,但是求出所需的解绝非易事。
实际上,除了极特殊情形外,人们不可能求出微分方程的解析解,只能用各种近似方法得到满足一定精度的近似解。
在常微分方程中已经熟悉了级数解法和Picard 逐步逼近法,这些方法可以给出解的近似表达式,称为近似解析方法。
另一类方法只给出解在一些离散点上的值,称为数值方法。
后一类方法应用范围更广,特别适合用计算机计算,本章主要介绍常用的常微分方程数值解法。
7.1实际问题的微分方程模型函数是事物的内部联系在数量方面的反映,如何寻找变量之间的函数关系,在实际应用中具有重要意义。
在许多实际问题中,往往不能直接找出变量之间的函数关系,但是有时却容易找出变量的改变量之间的关系,从而建立描述问题的微分方程模型。
例7.1.1 将初始温度00150u C =的一碗汤放置于环境温度a u 保持为024C 的桌上,10分钟后测得汤的温度为0100C 。
如果汤的温度低于055C 才可以喝,试问再过20分钟后这碗汤能喝了吗?解:为了解决这一问题,需要了解有关热力学的一些基本规律。
热量总是从温度高的物体向温度低的物体传导的;在一定的温度范围内,一个物体的温度变化速度与这个物体的温度和其所在的介质温度的差值成正比。
设物体在t 时刻的温度为()u u t =,从t t t →+∆温度从()()u t u t t →+∆,注意到热量总是从温度高的物体向温度低的物体传导,因而0a u u >,所以温度差a u u -恒正,又因物体将随时间而逐渐冷却;则温度的改变量为:()()(())a u u t t u t k u t t u t∆=+∆-=-+∆-∆两边除以t ∆,并令0t ∆→得温度变化速度为:()a du k u u dt=--这里0k >是比例常数。
第7章 常微分方程数值解法
2
t 是时间 ;c是弹簧常数。
3
当弹簧在振动开始时刻t = t0 时的初始位置x( t0)= x0 和初速度
dx dt
x (t ) x
0 0 t t0
确定时,弹簧的振动规律x(t) 也就唯一确定。这就 是一个常微分方程的初值问题,可写成:
称为步长。当
h h (常值)时称为等步长,有
i
xi x0 ih, (i 1,2,...n)
或
xi1 xi h, (i 0,1,2,...n 1)
7
因为初值问题中的初始条件 y (a) y0 为已知,即 可利用已知的 y 0 来求出下一节点处 y ( x1 ) 的近似值 y 1
初值问题(1.1)的数值解法,常采用差分方法,即把
一个连续的初值问题离散化为一个差分方程来求解。即将 (1.1)离散化后,求找其解y
= y (x)在一系列离散节点
6
a = x0 < x1 < … < xi < … < xn = b
上的近似值y0, y1, …, yn。
两相邻节点间的距离
hi = xi+1 - xi (i=0,1,2,…,n-1)
yi 1 yi hf ( xi , y i )(i 0,1,2 , n 1) (2.2)
这就是欧拉(Euler)公式,又称欧拉格式。利用它 可由已知的初值 y0 出发,逐步算出 y1 , y 2 , y n 。这 类形式的方程也称为差分方程。 当假定 yi 为准确,即在 yi y ( xi ) 的前提下来估 计误差 y ( xi 1) y i 1 ,这种截断误差称为局部截断误 差。由(2.1)和(2.2)可知,欧拉格式在节点x i 1 处的局部截断误差显然为:
第七章常微分方程数值解法
h2 h3 y ( xi 1 ) y ( xi h) y ( xi ) hy '( xi ) y ''( xi ) y '''( xi ) 2! 3!
丢掉高阶项,有
y( xi 1 ) y( xi h) y( xi ) hy '( xi ) yi hf ( xi , yi )
| f ( x, y1 ) f ( x, y2 ) | L | y1 y2 | ,
那么模型问题在 [ a, b] 存在唯一解。
Lipschitz 连续: | f ( x, y1 ) f ( x, y2 ) | L | y1 y2 | .
(1) 比连续性强: y1 y2 可推出 f ( x, y1 ) f ( x, y2 ) ; (2) 比连续的 1 阶导弱:具有连续的 1 阶导,则
f | f ( x, y1 ) f ( x, y2 ) || ( ) || y1 y2 | L | y1 y2 | . y
常微分方程数值解法
目标:计算出解析解 y ( x) 在一系列节点 a x0 x1 xn1 xn b 处的近似值 yi y( xi ) ,即所谓的数值解。节点间距 hi xi 1 xi ,一般 取为等距节点。
常微分方程初值问题的数值解法一般分为两大类: (1)单步法:在计算 yn 1 时,只用到前一步的值,即用到 xn1 , xn , yn ,则给定初
值之后,就可逐步计算。例如 Euler 法、向后欧拉法、梯形公式、龙格-库塔法;
(2) 多步法: 这 类 方 法 在 计算 yn 1 时 , 除 了 用 到 xn1 , xn , yn 外 , 还 要 用到
常微分方程中的数值方法
常微分方程中的数值方法常微分方程是数学中的一个重要分支。
它主要研究的对象是随时间变化的函数。
在实际应用中,我们需要求解这些函数的解析解,但通常情况下,解析解并不容易得到,甚至是不可能得到。
因此,我们需要使用数值方法来求解这些函数的数值近似解。
在本文中,我们将介绍常微分方程中的数值方法。
一、欧拉法欧拉法是常微分方程数值解法中最基本的一种方法。
它是根据欧拉公式推导而来的。
具体地,我们可以将一阶常微分方程dy/dt=f(t,y)写成如下形式:y(t+h)=y(t)+hf(t,y(t))其中,h是步长,f(t,y)是t时刻y的导数。
欧拉法就是通过上面的公式进行逐步逼近,然后得到最终的数值解。
欧拉法的计算过程非常简单,但所得到的解可能会出现误差。
这是因为欧拉法忽略了f(t+h,y(t+h))和f(t,y(t))之间的变化。
因此,我们需要使用更为精确的数值方法来解决这个问题。
二、改进欧拉法为了解决欧拉法中的误差问题,我们可以使用改进欧拉法。
改进欧拉法又称作四阶龙格-库塔法。
它的基本思想是对欧拉法公式进行改进,以提高计算精度。
具体地,根据龙格-库塔公式,可将改进欧拉法表示为:y(t+h)=y(t)+1/6(k1+2k2+2k3+k4)其中,k1=h*f(t,y)k2=h*f(t+h/2,y+k1/2)k3=h*f(t+h/2,y+k2/2)k4=h*f(t+h,y+k3)改进欧拉法的计算过程比欧拉法要复杂些,但所得到的数值解比欧拉法更精确。
这种方法适用于一些特殊的问题,但在求解一些更为复杂的问题时,还需要使用其他的数值方法。
三、龙格-库塔法龙格-库塔法是求解常微分方程中数值解的常用方法之一。
它最常用的是四阶龙格-库塔法。
这种方法的基本思想是使用四个不同的斜率来计算数值解。
具体地,我们可以将四阶龙格-库塔法表示为:y(t+h)=y(t)+1/6(k1+2k2+2k3+k4)其中,k1=h*f(t,y)k2=h*f(t+h/2,y+k1/2)k3=h*f(t+h/2,y+k2/2)k4=h*f(t+h,y+k3)与改进欧拉法相比,龙格-库塔法的计算复杂度更高,但所得到的数值解更为精确。
常微分方程的数值解法
常微分方程的数值解法1. 引言常微分方程是自变量只有一个的微分方程,广泛应用于自然科学、工程技术和社会科学等领域。
由于常微分方程的解析解不易得到或难以求得,数值解法成为解决常微分方程问题的重要手段之一。
本文将介绍几种常用的常微分方程的数值解法。
2. 欧拉方法欧拉方法是最简单的一种数值解法,其具体步骤如下:- 将自变量的区间等分为n个子区间;- 在每个子区间上假设解函数为线性函数,即通过给定的初始条件在每个子区间上构造切线;- 使用切线的斜率(即导数)逼近每个子区间上的解函数,并将其作为下一个子区间的初始条件;- 重复上述过程直至达到所需的精度。
3. 改进的欧拉方法改进的欧拉方法是对欧拉方法的一种改进,主要思想是利用两个切线的斜率的平均值来逼近每个子区间上的解函数。
具体步骤如下: - 将自变量的区间等分为n个子区间;- 在每个子区间上构造两个切线,分别通过给定的初始条件和通过欧拉方法得到的下一个初始条件;- 取两个切线的斜率的平均值,将其作为该子区间上解函数的斜率,并计算下一个子区间的初始条件;- 重复上述过程直至达到所需的精度。
4. 二阶龙格-库塔方法二阶龙格-库塔方法是一种更为精确的数值解法,其基本思想是通过近似计算解函数在每个子区间上的平均斜率。
具体步骤如下: - 将自变量的区间等分为n个子区间;- 在每个子区间上计算解函数的斜率,并以该斜率的平均值近似表示该子区间上解函数的斜率;- 利用该斜率近似值计算下一个子区间的初始条件,并进一步逼近解函数;- 重复上述过程直至达到所需的精度。
5. 龙格-库塔法(四阶)龙格-库塔法是目前常用的数值解法之一,其精度较高。
四阶龙格-库塔法是其中较为常用的一种,其具体步骤如下:- 将自变量的区间等分为n个子区间;- 在每个子区间上进行多次迭代计算,得到该子区间上解函数的近似值;- 利用近似值计算每个子区间上的斜率,并以其加权平均值逼近解函数的斜率;- 计算下一个子区间的初始条件,并进一步逼近解函数;- 重复上述过程直至达到所需的精度。
第7章 常微分方程数值解法
代入(6―3)式得
h yi 1 yi [ f ( xi , yi ) f ( xi 1 , yi 1 )] 2 i 0,1, 2, , n 1
(6―5)
这样得到的点列仍为一折线,只是用平均斜率 来代替原来一点处的斜率。式(6―5)称为改进的欧拉 公式。
不难发现,欧拉公式(6―3)是关于yi+1 的显式,只
h y xi 1 yi 1 f xi 1 , y xi 1 f xi 1 , yi 1 2 (6―15) h 3 '' f 12
因此
hL h3 y ( xi 1 ) yi 1 y ( xi 1 ) yi 1 f ( ) 2 12 h3 (1 q) y ( xi 1 ) yi 1 f ( ) 12 y ( xi 1 ) yi 1 O ( h 3 )
c 并取 yi 1 yi(1)
(6―7)
虽然式(6―7)仅迭代一次,但因进行了预先估计,
故精度却有较大的提高。 在实际计算时,还常常将式(6―7)写成下列形式:
k1 f ( xi , yi ) k f ( x h, y hk ) i i 1 2 h yi 1 yi 2 (k1 k2 ) i 0,1, 2,
在进行误差分析时,我们假设yi=y(xi),考虑用
yi+1 代替y(x
i+1)而产生截断误差,确定欧拉公式和改
进的欧拉公式的精确度。 设初值问题(6―1)的准确解为y=y(x),则利用泰 勒公式
y ( xi 1 ) y ( xi h ) h2 y ( xi ) hy ( xi ) y ( xi ) 2! h3 y ( xi ) 3!
实验报告七常微分方程初值问题的数值解法
浙江大学城市学院实验报告课程名称数值计算方法实验项目名称常微分方程初值问题的数值解法 实验成绩指导老师签名日期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=eulera,b,n,y0,f,f1,b1改进Euler 法y=eulerproa,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 ,又如果普通的人和与众不同的人的婚配是任意的,则此问题可以用微分方程表示为:其中变量()()()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’,‘x ’ subsexpr,{x,y,…},{x1,y1,…}其中‘egn i ’表示第i 个方程,‘x ’表示微分方程中的自变量,默认时自变量为t ; subs 命令中的expr 、x 、y 为符合型表达式,x 、y 分别用数值x1、x2代入; >>symsxyz>>subs'x+y+z',{x,y,z},{1,2,3} ans= 6>>symsx>>subs'x^2',x,2 ans= 4>>s=dsolve‘12Dy y ∧=+’,‘(0)1y =’,‘x ’ ans= >>symsx >>subss,x,2 ans=右端函数(,)f x y 的自动生成f=inline ‘expr ’,’var1’,‘var2’,……其中’expr ’表示函数的表达式,’var1’,‘var2’表示函数表达式中的变量,运行该函数,生成一个新的函数表达式为fvar1,var2,……; >>f=inline'x+3y','x','y' f=Inlinefunction: fx,y=x+3y >>f2,3 ans= 114,5阶龙格-库塔方法求解微分方程数值解t,x=ode45f,ts,x0,options其中f 是由待解方程写成的m 文件名;x0为函数的初值;t,x 分别为输出的自变量和函数值列向量,t的步长是程序根据误差限自动选定的;若ts=t0,t1,t2,…,tf,则输出在自变量指定值,等步长时用ts=t0:k:tf,输出在等分点;options 用于设定误差限可以缺省,缺省时设定为相对误差310-,绝对误差610-,程序为:options=odeset ‘reltol ’,rt,’abstol ’,at,这里rt,at 分别为设定的相对误差和绝对误差;常用选项见下表;选项名 功能 可选值 省缺值 AbsTol 设定绝对误差正数 RelTol 设定相对误差 正数InitialStep 设定初始步长 正数 自动 MaxStep设定步长上界正数MaxOrder 设定ode15s 的最高阶数 1,2,3,4,5 5 Stats 显示计算成本统计 on,off off BDF 设定ode15s 是否用反向差分on,offoff例:在命令窗口执行>>odefun =inline ‘2*y t y -’,‘t ’,‘y ’;>>[],45(,[0,4],1)t y ode odefun =;ans=>>t y ‘o-’,%解函数图形表示>>45(,[0,4],1)ode odefun %不用输出变量,则直接输出图形 >>[],45(,0:4,1)t y ode odefun =;[],t yans=三.操作方法与实验步骤包括实验数据记录和处理2-1编程编写用向前欧拉公式和改进欧拉公式求微分方程数值解的Matlab 程序,问题如下:在区间[],a b 内(1)N +个等距点处,逼近下列初值问题的解,并对程序的每一句添上注释语句; Euler 法y=eulera,b,n,y0,f,f1,b1改进Euler 法y=eulerproa,b,n,y0,f,f1,b1Euler 法y=eulera,b,n,y0,f,f1,b1 y=zeros1,n+1; y1=y0; h=b-a/n; x=a:h:b; fori=1:n; yi+1=yi+hfxi,yi; end plotx,y holdon%求微分方程的精确解 x1=linspacea,b,100; '精确解为' s=dsolvef1,b1,'x' symsxy1=zeros1,100; for i=1:100y1i=subss,x,x1i; endplotx1,y1,'r'title'红色代表精确解'改进Euler 法y=eulerproa,b,n,y0,f,f1,b1 %求微分方程的数值解 y=zeros1,n+1; y1=y0; h=b-a/n; x=a:h:b; fori=1:n; T1=fxi,yi; T2=fxi+1,yi+hT1; yi+1=yi+h/2T1+T2; end plotx,y holdon%求微分方程的精确解 x1=linspacea,b,100; '精确解为' s=dsolvef1,b1,'x' symsxy1=zeros1,100; fori=1:100 y1i=subss,x,x1i; endplotx1,y1,'r'title'红色代表精确解' 2-2分析应用题假设等分区间数100n =,用欧拉法和改进欧拉法在区间[0,10]t ∈内求解初值问题()()20(0)10y t y t y '=-⎧⎨=⎩并作出解的曲线图形,同时将方程的解析解也画在同一张图上,并作比较,分析这两种方法的精度;1向前欧拉法>>euler0,10,100,10,inline'y-20','x','y','Dy=y-20','y0=10' ans= 精确解为 s= 20-10expx ans= +005Columns1through8(2)改进欧拉法>>eulerpro0,10,100,10,inline'y-20','x','y','Dy=y-20','y0=10' ans= 精确解为 s= 20-10expx ans= +005Columns1through8改进欧拉法的精度比向前欧拉法更高; 2-3分析应用题用以下三种不同的方法求下述微分方程的数值解,取10h = 画出解的图形,与精确值比较并进行分析; 1欧拉法; 2改进欧拉法;2-4分析应用题考虑一个涉及到社会上与众不同的人的繁衍问题模型;假设在时刻t 单位为年,社会上有人口()x t 人,又假设所有与众不同的人与别的与众不同的人结婚后所生后代也是与众不同的人;而固定比例为r 的所有其他的后代也是与众不同的人;如果对所有人来说出生率假定为常数b ,又如果普通的人和与众不同的人的婚配是任意的,则此问题可以用微分方程表示为:其中变量()()()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 中得到的结果与此时的精确值进行比较;1>>euler0,50,50,,inline'','t','p','Dp=','p0= 1' ans= 精确解为 s=1-99/100expx/500 ans=Columns1through82>>dsolve'Dp=','p0=','t' ans=1-99/100expt/500 >>1-99/100exp ans=与欧拉法求得的精确值差0,0001四.实验结果与分析。
常微分方程的数值解法
常微分方程的数值解法常微分方程是研究变量的变化率与其当前状态之间的关系的数学分支。
它在物理、工程、经济等领域有着广泛的应用。
解常微分方程的精确解往往十分困难甚至不可得,因此数值解法在实际问题中起到了重要的作用。
本文将介绍常见的常微分方程的数值解法,并比较其优缺点。
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. 多步法和多级法除了亚当斯法,还有其他的多步法和多级法可以用于解常微分方程。
多步法通过利用多个点的值来逼近解,从而提高精度。
而多级法则将步长进行分割,分别计算每个子问题的解,再进行组合得到整体解。
(整理)第七章常微分方程数值解
(整理)第七章常微分方程数值解第七章常微分方程数值解7.1 引言本章讨论常微分方程初值问题(7.1.1)的数值解法,这也是科学与工程计算经常遇到的问题,由于只有很特殊的方程能用解析方法求解,而用计算机求解常微分方程的初值问题都要采用数值方法.通常我们假定(7.1.1)中f(x,y)对y满足Lipschitz 条件,即存在常数L>0,使对,有(7.1.2)则初值问题(7.1.1)的解存在唯一.假定(7.1.1)的精确解为,求它的数值解就是要在区间上的一组离散点上求的近似.通常取,h称为步长,求(7.1.1)的数值解是按节点的顺序逐步推进求得.首先,要对方程做离散逼近,求出数值解的公式,再研究公式的局部截断误差,计算稳定性以及数值解的收敛性与整体误差等问题. 7.2 简单的单步法及基本概念7.2.1 Euler法、后退Euler法与梯形法求初值问题(7.1.1)的一种最简单方法是将节点的导数用差商代替,于是(7.1.1)的方程可近似写成(7.2.1)从出发,由(7.2.1)求得再将代入(7.2.1)右端,得到的近似,一般写成(7.2.2)称为解初值问题的Euler法.Euler法的几何意义如图7-1所示.初值问题(7.1.1)的解曲线y=y(x)过点,从出发,以为斜率作一段直线,与直线交点于,显然有,再从出发,以为斜率作直线推进到上一点,其余类推,这样得到解曲线的一条近似曲线,它就是折线.Euler法也可利用的Taylor展开式得到,由(7.2.3) 略去余项,以,就得到近似计算公式(7.2.2).另外,还可对(7.1.1)的方程两端由到积分得(7.2.4)若右端积分用左矩形公式,用,,则得(7.2.2).如果在(7.2.4)的积分中用右矩形公式,则得(7.2.5)称为后退(隐式)Euler法.若在(7.2.4)的积分中用梯形公式,则得(7.2.6)称为梯形方法.上述三个公式(7.2.2),(7.2.5)及(7.2.6)都是由计算,这种只用前一步即可算出的公式称为单步法,其中(7.2.2)可由逐次求出的值,称为显式方法,而(7.2.5)及(7.2.6)右端含有当f对y非线性时它不能直接求出,此时应把它看作一个方程,求解,这类方法称为稳式方法.此时可将(7.2.5)或(7.2.6)写成不动点形式的方程这里对式(7.2.5)有,对(7.2.6)则,g与无关,可构造迭代法(7.2.7)由于对y满足条件(7.1.2),故有当或,迭代法(7.2.7)收敛到,因此只要步长h足够小,就可保证迭代(7.2.7)收敛.对后退Euler法(7.2.5),当时迭代收敛,对梯形法(7.2.6),当时迭代序列收敛.例7.1用Euler法、隐式Euler法、梯形法解取h=0.1,计算到x=0.5,并与精确解比较.解本题可直接用给出公式计算.由于,Euler法的计算公式为n=0时,.其余n=1,2,3,4的计算结果见表7-1. 对隐式Euler法,计算公式为解出当n=0时,.其余n=1,2,3,4的计算结果见表7-1. 表7-1 例7.1的三种方法及精确解的计算结果对梯形法,计算公式为解得当n=0时,.其余n=1,2,3,4的计算结果见表7-1.本题的精确解为,表7-1列出三种方法及精确解的计算结果.7.2.2 单步法的局部截断误差解初值问题(7.1.1)的单步法可表示为(7.2.8)其中与有关,称为增量函数,当含有时,是隐式单步法,如(7.2.5)及(7.2.6)均为隐式单步法,而当不含时,则为显式单步法,它表示为(7.2.9)如Euler法(7.2.2),.为讨论方便,我们只对显式单步法(7.2.9)给出局部截断误差概念.定义2.1设y(x)是初值问题(7.1.1)的精确解,记(7.2.10)称为显式单步法(7.2.9)在的局部截断误差.之所以称为局部截断误差,可理解为用公式(7.2.9)计算时,前面各步都没有误差,即,只考虑由计算到这一步的误差,此时由(7.2.10)有局部截断误差(7.2.10)实际上是将精确解代入(7.2.9)产生的公式误差,利用Taylor展开式可得到.例如对Euler法(7.2.2)有,故它表明Euler法(7.2.2)的局部截断误差为,称为局部截断误差主项.定义2.2 设是初值问题(7.1.1)的精确解,若显式单步法(7.2.9)的局部截断误差,是展开式的最大整数,称为单步法(7.2.9)的阶,含的项称为局部截断误差主项.根据定义,Euler法(7.2.2)中的=1故此方法为一阶方法.对隐式单步法(7.2.8)也可类似求其局部截断误差和阶,如对后退Euler法(7.2.5)有局部截断误差故此方法的局部截断误差主项为,也是一阶方法.对梯形法(7.2.6)同样有它的局部误差主项为,方法是二阶的.7.2.3 改进Euler法上述三种简单的单步法中,梯形法(7.2.6)为二阶方法,且局部截断误差最小,但方法是隐式的,计算要用迭代法.为避免迭代,可先用Euler法计算出的近似,将(7.2.6)改为(7.2.11)称为改进Euler法,它实际上是显式方法.即(7.2.12)右端已不含.可以证明,=2,故方法仍为二阶的,与梯形法一样,但用(7.2.11)计算不用迭代.例7.2用改进Euler法求例7.1的初值问题并与Euler法和梯形法比较误差的大小.解将改进Euler法用于例7.1的计算公式当n=0时,.其余结果见表7-2.表7-2 改进Euler法及三种方法的误差比较从表7-2中看到改进Euler法的误差数量级与梯形法大致相同,而比Euler法小得多,它优于Euler法.讲解:求初值问题(7.1.1)的数值解就是在假定初值问题解存在唯一的前提下在给定区间上的一组离散点上求解析解的一组近似为此先要建立求数值解的计算公式,通常称为差分公式,简单的单步法就是由计算下一步,构造差分公式有三种方法,一是用均差(即差商)近似,二是用等价的积分方程(7.2.4)用数值积分方法,三是用函数的Taylor展开,其中Taylor展开最有普遍性,可以得到任何数值解的计算公式及其局部截断误差。
第7章-常微分方程初值问题的数值解法
由 点 斜 式 写 出 切 线 方 程 :
dy yy0(xx0)dx(x0,y0) y0(xx0)f(x0,y0)
等 步 长 为 h , 则 x x 0 h , 可 由 切 线 算 出 y 1
y1y0hf(x0,y0)
2021/4/9
10
其 中 , y n 1 是 当 y n y (x n )(精 确 解 )时 由 E u le r法 求 出 的 值 , 即 y n 无 误 差 。
将 y (x n 1 )在 x n 点 T a y lo r展 开 :
y (x n 1 ) y (x n h ) y (x n ) h f(x n ,y (x n )) (h 2 x2 n y ()xn1)
ax0 x1 x2 xn b 在节点上用离散化方法将连续型微分方程 转化成离散型代数方程即差分方程来求解。
具 体 作 法 : 利 用 y(x0)求 出 y(x1)的 近 似 值 y1, 再 由
y1求 出 y2,, 直 到 求 出 yn为 止 。 该 算 法 称 为 步 进
式 或 递 推 式 算 法 。
积 分 用 梯 形 公 式 , 且 令 : yn1y(xn1),yny(xn) 则 得 : yn1ynh 2(f(xn,yn)f(xn1,yn1))
R n 1 y (x n 1 ) y n 1 1 h 2 3y () x n x n 1
与Euler法结合,形成迭代算法,对n0, 1, 2,
yn(0)1ynhf(xn,yn) (75)
y 2021/4/9
(k1) n1
ynh2(f(xn,yn)f(xn1,yn(k1))k0,1,2,
12
2. Euler方法的截断误差
第七章常微分方程的数值解法课件
一个物体的温度变化速度与这个物体的温度和其所在的介质温度的差
值成正比。这是已为实验证实了的牛顿(Newton)冷却定律。设物 体在时刻的温度为 u , u则(t)温度的速度以 来示d。u
dt
注意到热量总是从温度高的物体向温度低的物体传导,因而 。u0 所 u以a 温 度差 恒正u;又ua因物体将随时间而逐渐冷却,故温度变化速度恒负。故有:
不过并不是所有的微分方程模型都可用上述方法求解出来。1638年莱布尼 茨向全世界提出如下的求解方法.
dy x2 y2 dx
该问题1886年才被数学家刘维尔证明没有解析解。只能借助于本章要介绍的 数值解法。
7.2 初值问题数值解法的推导方式及常用解法
我们先考虑常微分方程初值问题。它的数学模型是:求 y,使y(之x)满足
取步长h=0.02.
解 因为步长h=0.02,所以各节点xi 0.02i,i 0,1, 2,3, 4,5. 因为 y0 利1,用欧拉法的计算公式
yi1
yi
0.9hyi 1 2xi
,
可取 y1 0.9820, y2 0.9650, y3 0.9489, y4 0.9337, y5 0.9192.
,
需要知道两个初值.在此,我们利用后退欧拉法计算的结 果 y1 再 0依.9次830计, 算
y2 0.9660, y3 0.9508, y4 0.9354, y5 0.9218.
例7.2.1的解析解是 y (1 2用x)它0.45计, 算各节点的函数值可得
y1 0.9825055161, y2 0.9659603719, y3 0.9502806582,
把上述y4 三 0种.9方353法92计54算62的, y结5 果0.同921准23确07对78照3.,可以看出它们确 实都是准确值的近似值,只是误差不一样.欧拉法的误差偏 小,后退欧拉法偏大,中点法最小.这跟它们的局部截断误差 的符号、阶数、大小是一致的。
常微分方程数值解
y n 1 y n hf ( x n , y n ) z n 1 z n hf ( x n , z n )
所以,我们有:
e n 1 y n 1 z n 1 e n h f ( x n , y n ) f ( x n , z n ) e n hL y n z n e n (1 hL ) e0 (1 hL )
h 2
y ' ' ( n )
y n 1 y n 1 hf ( x n 1 , y n 1 )
是多步,2阶格式,该格式不稳定 6、梯形法-基于数值积分的公式 对微分方程
y'
dy dx dy dx
f ( x, y ) , x [a, b]
做积分,则:
x n 1
f ( x, y )
是1阶方法
e0
1 (1 hL )
n 1
hT
e n 1 O ( h )
称为整体截断误差
渭南师范学院 数学与信息科学系
Department of Mathematics and Information Science, Weinan Teachers University
3、稳定性-误差在以后各步的计算中不会无限制扩大。是格式对舍入误差的抑止作用 我们考虑一种简单情况,即仅初值有误差,而其他计算步骤无误差。 设 { z i } 是初值有误差后的计算值,则
Department of Mathematics and Information Science, Weinan Teachers University
这种方法 ,称为数值离散方法。求的是在一系列离散点列上,求未知函数y在这些 点上的值的近似。 基本步骤如下: ① 对区间作分割: I : a x 0 x1 x n b 求 y ( x ) 在 x i 上的近似值
第七章 常微分方程数值解法.
y f ( x, y), x [a,b]
y(
x0
)
y0
23
7.1 欧拉法和改进的欧拉法
欧拉公式
yi1 yi y0 y( x0 )
h
f
(xi ,
yi )
,
i
0,1,2,
改进的欧拉公式
yi
1
26
引言:
公式构造思想:从泰勒公式出发,寻找更高阶的 数值公式。
例如,泰勒公式计算到二阶可得
y(x + h) = y(x) + yⅱ(x)h + 1 y ?(x)h2 + O(h3) 2!
因
ìïïïíïïïî
y¢(x) = yⅱ(x) =
f (x, y(x)) df (x, y(x))
dx
=
fx (x, y(x)) +
可证明预测-校正公式的截断误差也为 O(h3)。
18
7.1.2 改进的欧拉法及预测-校正公式
例 取步长h=0.2,用改进的欧拉法的预测-校正公
式求解初值问题的数值解y1 , y2 .
ìïïíïïî
y¢= x + y(0) = 1
y
解
f (x, y) = x + y, x0 = 0, y0 = 1
预测-校正公式具体是
y( p) 2
=
0.2x1 +
1.2 y1
=
0.2?
0.2
1.2? 1.24
1.528
y2 = y1 + 0.1[(x1 + y1) + (x2 + y2( p) )] = 1.24 + 0.1(0.2 + 1.24 + 0.4 + 1.528) = 1.5768
计算物理 常微分方程数值解法
》
定律f=ma,引入速度则它变为
dy dt
f (t, y)
dv
dt
f m
初始条件的个数与阶数一样
第6页/共18页
第7章 微分方程的初值问题和边值问题
欧拉近似法是把y的微商用上节的差商来代替,这样不难得出公式
《
计
算
y(n 1) y(n) hf (t(n), y(n))
物
理 导
t(n) t0 nh
论 》
y(0) y(t t0 )
这里h是t的步长
第7页/共18页
back
第7章 微分方程的初值问题和边值问题
地球绕太阳的运动遵从牛顿第二定律和万有引力定律。以太阳为
原点,建立平面直角坐标系,则行星运动满足的微分方程为:
《 计 算即 物 理 导 论 》
d 2r GM r
dt 2
r3
d2x dt2
[ f (x h) f (x)][ f (x) f (x h)]
f (x h) 2 f (x) f (x h)
《
计
相应的二阶微商,即用二阶差商代替二阶微商,有:
算
物 理
f (x h) 2 f (x) f (x h) f (x) h2 f (4) (x) O(h2 ) back
》
差分 f 也可以定义为:
f f (x) f (x h)
称为一阶向后差分。
第1页/共18页
第7章 微分方程的初值问题和边值问题
差分运算还有另一种定义:
f (x) f (x h / 2) f (x h / 2)
称为一阶中心差分。
《 一阶差分除以增量h的商,即为一阶差商,所以上述定义相应的差商为
导
2h
常微分方程初值问题解法
8
4 后退的欧拉方法
(5)
9
(6)
(6)式称为后退的欧拉方法,它是隐式的, 欧拉公式(2)是显式的,
10
(7)
11
12
后退的欧拉方法的局部截断误差:
13
5 梯形方法
(8)
(8)式称为梯形方法.
14
梯形方法的局部截断误差:
15
6. 改进欧拉法及局部截断误差
(1)改进的欧拉公式:
预测步
~ yn 1 yn hf xn , yn
33
提高Runge-Kutta方法的精度的方法
提高积分方法的精度,我们最熟悉的(不一定是最好的)措施是
Richardson 外推法
我们用一个例子予以说明如下 的近似解: Euler法 yn 1 yn hyn y ( h ) ( x) y ( x) c1h c2 h 2 h 将步长减半为 时,有 2 h ( ) 1 1 y 2 ( x) y ( x) c1h c2 h 2 2 4
h) p 1 Yn( (1 1 ch
d
(h) n 1
因此可以从两次计算当中估计出每一步的截断误差,有了这个误差估计之后, 通过与控制误差限比较,就可以控制步长. 注意这个方法增加了计算量.
35
1 1 2 p
) (h (h) 2 Y Y n 1 ; n 1
30
yx 例 求解初值问题ODE : dy dx
易知其精确解为:y 2 2 x x 2 e x
2
,
y (0) 1.
步长都取为 h 0.1 分别用二阶、四阶 R K方法求解:
x
0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
《数值分析》第7章 常微分方程的数值解法
1.040818
0.4
1.056100
1.070320
0.5
1.090490
1.106531
7.2.2 隐式Euler公式
隐式Euler公式除了可以用上一小节中的方法来推导外,亦可以用差商近似
导数的方法来推导。
在 xn1点处列出式(7.1)中的常微分方程,得
y( xn1) f (xn1, y( xn1))
h(1 2
h)
xn
h 2
( xn
h
h(2 2
h) )
= 0.905yn 0.095xn 0.1
7.2.4 改进Euler公式
当n=0时, y1 0.905 y0 0.095x0 0.1 1.005其00余0结果见表7-4。由
表7-4可以看出,改进Euler公式与梯形公式的精度相当。
y(xn1) y(xn ) hf (xn , y(xn ))
(7.3)
用 yn 代替 ,得到下列递推公式
yn1 yn hf (xn , yn ) (n 0,1, 2,…)
(7.4)
由 y(x0 )=y0依次递推得到 y1, y2 ,…, yn ,…式(7.4)称为Euler公式。
7.2.1 欧拉法
例1 用Euler公式计算下列初值问题(取步长h=0.1):
y y x 1 (0 x 0.5)
y(0)
1
解:Euler公式的计算格式为
yn1 yn hf (xn , yn ) yn +0.(1 -yn xn +1) 0.9 yn 0.1xn 0.1
由 y(0) 1进行递推计算得:
xn
二阶Taylor公式yn 四阶Taylor公式yn
yn1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第七章 常微分方程数值解法简介微分方程在科学和工程技术中有很广泛的应用。
许多实际问题的数学模型都可以用微分方程来描述,归结为常微分方程的定解问题;很多偏微分方程问题,也可以化为常微分方程问题来近似求解,但是求出所需的解绝非易事。
实际上,除了极特殊情形外,人们不可能求出微分方程的解析解,只能用各种近似方法得到满足一定精度的近似解。
在常微分方程中已经熟悉了级数解法和Picard 逐步逼近法,这些方法可以给出解的近似表达式,称为近似解析方法。
另一类方法只给出解在一些离散点上的值,称为数值方法。
后一类方法应用范围更广,特别适合用计算机计算,本章主要介绍常用的常微分方程数值解法。
7.1实际问题的微分方程模型函数是事物的内部联系在数量方面的反映,如何寻找变量之间的函数关系,在实际应用中具有重要意义。
在许多实际问题中,往往不能直接找出变量之间的函数关系,但是有时却容易找出变量的改变量之间的关系,从而建立描述问题的微分方程模型。
例7.1.1 将初始温度00150u C =的一碗汤放置于环境温度a u 保持为024C 的桌上,10分钟后测得汤的温度为0100C 。
如果汤的温度低于055C 才可以喝,试问再过20分钟后这碗汤能喝了吗?解:为了解决这一问题,需要了解有关热力学的一些基本规律。
热量总是从温度高的物体向温度低的物体传导的;在一定的温度范围内,一个物体的温度变化速度与这个物体的温度和其所在的介质温度的差值成正比。
设物体在t 时刻的温度为()u u t =,从t t t →+∆温度从()()u t u t t →+∆,注意到热量总是从温度高的物体向温度低的物体传导,因而0a u u >,所以温度差a u u -恒正,又因物体将随时间而逐渐冷却;则温度的改变量为:()()(())a u u t t u t k u t t u t∆=+∆-=-+∆-∆两边除以t ∆,并令0t ∆→得温度变化速度为:()a du k u u dt=--这里0k >是比例常数。
从而得出描述物体冷却过程的微分方程模型为:0()(0)a duk u u dt u u ⎧=--⎪⎨⎪=⎩(7.1.1)容易求出这个一阶微分方程初值问题的解为:0()kta a u u u u e-=+- (7.1.2)根据所给问题的条件知当10t =时,01100u u C ==,得到:1010()ka a u u u u e-=+-将00150u C =,024a u C =带入得到:0111ln ln 1.660.0511010a au u k u u -=≈≈-从而得这碗汤的温度随时间变化的函数关系为: 0.0510.0510()()24126tta a u u t u u u ee--==+-=+ (7.1.3)于是,将30t =带入计算得,再过20分钟后汤的温度就是0251u C ≈。
说明再过20分钟后这碗汤能喝了。
不过并不是所有的微分方程模型都可求出解析解,从而得出实际问题的解释。
例如看似简单的微分方程22dy x ydx=+,自德国数学家Wilhelm von Leibniz 提出100多年后才被法国数学家Joseph Liouville 证明它没有解析解,只能借助于数值的方法求数值解。
例7.1.2 某地区发现一种有免疫性的传染病,为了控制疫情扩散对该地区人群进行隔离处理。
为了分析受感染人数的变化规律,需要建立描述传染病传播过程的数学模型。
解:设该地区的总人数为常数N ,任意t 时刻病人、健康人和病人治愈后移出感染系统的移出者的比例分别为(),(),()i t s t r t ,病人的日接触率λ,日治愈率μ,则容易得出从t t t →+∆时刻,病人和健康人的改变量为:[()()]()()()[()()]()()N i t t i t N s t i t t N i t tN s t t s t N s t i t t λμλ+∆-=∆-∆⎧⎨+∆-=-∆⎩每个方程两边除以t ∆,并令0t ∆→,化简后得:00(0),(0)d i s i i d td s s i d t i i s s λμλ⎧=-⎪⎪⎪=-⎨⎪==⎪⎪⎩(7.1.4) 其中, ()()()1s t i t r t ++=,对任意的t 。
(7.1.4)就是描述病人和健康人的比例()i t 和()s t 随时间变化的微分方程模型,这是一个微分方程组的初值问题。
但是这一初值问题的解析解是无法求出的,因此不能直接利用()i t 和()s t 的解析式来分析和解决问题。
在数学建模课程中学到的大量数学模型都是微分方程形式给出的,各类微分方程本身和它们的解所具有的特性已在常微分方程及数学物理方程中得以解释。
虽然求解微分方程有许多解析方法,但解析方法只能够求解一些特殊类型的方程,在实际应用中人们更关心的是某些特定的自变量在某一个定义范围内的一系列离散点上的近似值。
这样一组近似解称为微分方程在该范围内的数值解,寻找微分方程数值解的过程称为微分方程的数值解法。
7.2简单的数值方法与基本概念7.2.1常微分方程初值问题设(,)f x y 在区域:,G a x b y ≤≤<∞上连续,求()y y x =满足0(,),()dyf x y a x b dx y a y⎧=<≤⎪⎨⎪=⎩(7.2.1) 其中0y 是已知常数,这就是一阶常微分方程的初值问题。
为使问题(7.2.1)的解存在、唯一且连续依赖初值0y ,即初值问题(7.2.1)适定,还必须对右端项(,)f x y 加适当限制,通常要求(,)f x y 关于y 满足是已知函数,且满足Lipschitz 条件:存在常数L ,使1212(,)(,)f x y f x y L y y -≤- (7.2.2)对所有[,]x a b ∈和12,(,)y y ∈-∞+∞成立。
本章总假定f 满足此条件。
7.2.2 Euler 法及改进的Euler 法 7.2.2.1 Euler 方法的导出与几何意义最简单的数值解法是Euler 法。
将区间[0,]T 作N 等分,小区间的长度/h T N =称为步长,点列i x a ih =+,(0,1,...,)i N =称为节点,0x a =。
由已知初值00()y x y =,可算出()y x 在0x x =的导数'00000()(,())(,)y x f x y x f x y ==。
下面用三种方法导出Euler 法。
本章用()i y x 表示函数()y x 在i x 点的精确值、i y 表示()i y x 的近似值。
(1)幂级数展开法利用Taylor 展式23''''''100000000()()()()()()26(,)hhy x y x h y x hy x y x y y hf x y R ξ=+=+++=++ (7.2.3)其中01(,)x x ξ∈,并略去二阶小量0R ,得1000(,)y y hf x y =+,1y 就是1()y x 的近似值。
利用1y 又可算出2y ,如此下去可算出()y x 在所有节点上的值,一般递推公式为:1(,)n n n n y y hf x y +=+,0,1,...,1n N =- (7.2.4)这就是Euler 法。
Euler 法有明显的几何意义。
实际上,初值问题(7.2.1)的解是x ,y 平面上过点00(,)x y 的一条积分曲线。
按Euler 法,过初始点00(,)x y 作经过此点的积分曲线的切线(斜率为00(,)f x y ),沿切线取点11(,)x y (1y 按(7.2.4)计算)作为11(,())x y x 的近似。
然后过11(,)x y 作经过此点的积分曲线的切线(斜率为11(,)f x y ),沿切线取点22(,)x y (2y 按(7.2.4)计算)作为22(,())x y x 的近似。
如此下去,即得一以(,)n n x y 为顶点的折线,这就是用Euler 法得到的近似积分曲线(如图7.1.1所示)。
从几何上看,h 越小,此折线逼近积分曲线越好,因此也称Euler 法为Euler 折线法。
图7.1.1 Euler 近似积分曲线(2)数值微分法 利用向前差商近似导数1()()()n n n y x y x y x h+-'≈1()()()(,)n n n n n n y x y x hy x y h f x y +'≈+=+从而得出Euler 法的一般递推公式:1(,)n n n n y y hf x y +=+,0,1,...,1n N =-(3)数值积分法将初值问题(7.2.1)写成等价的积分形式:0()()(,())x x y x y x f t y t dt =+⎰取1x x =时得1010()()(,())x x y x y x f t y t dt =+⎰(7.2.5)用左矩形公式近似右端积分,并用1y 替代1()y x ,即得1000(,)y y hf x y =+,从而也可得出Euler 法的一般递推公式为:1(,)n n n n y y hf x y +=+,0,1,...,1n N =-。
7.2.2.2 改进的Euler 方法由Euler 方法的数值积分导出法可知只要给出(7.2.5)式右端定积分的一种近似计算方法,就可得出初值问题(7.2.1)的一种数值求解方法。
如果用右矩形公式近似(7.2.5)式右端积分,则可得1011(,)y y hf x y =+,从而也可得出一般递推公式为:111(,)n n n n y y hf x y +++=+,0,1,...,1n N =- (7.2.6)称(7.2.6)为后退Euler 法。
如果用梯形公式近似(7.2.5)式右端定积分,则可得100011[(,)(,)]2h y y f x y f x y =++从而得出一般递推公式为:111[(,)(,)]2n n n n n n h y y f x y f x y +++=++,0,1,...,1n N =- (7.2.7)称(7.2.7)为改进的Euler 法,显然改进的Euler 法比Euler 法精度更高。
后退Euler 法和改进的Euler 法,由于未知数1n y +同时出现在等式的两边,故称为隐式;如果未知数1n y +由已知量直接计算即不只出现在等式右端,则称为显式。
对于隐式算法每步计算需要解关于1n y +的方程,而这样的方程往往是非线性的,通常将初值取为[0]1n n y y +=用迭代法求解,一般只需迭代几步即可收敛。
一般先用显式公式计算一个初值,再用隐式公式迭代求解。
如果先用显式Euler 公式作预测,算出1(,)n n n n y y hf x y +=+,再将1n y +代入隐式梯形公式的右边作校正,得到111[(,)(,)]2n n n n n n h y y f x y f x y +++=++。