第七章 常微分方程模型的数值解法
第七章 常微分方程模型的数值解法

第七章 常微分方程数值解法简介微分方程在科学和工程技术中有很广泛的应用。
许多实际问题的数学模型都可以用微分方程来描述,归结为常微分方程的定解问题;很多偏微分方程问题,也可以化为常微分方程问题来近似求解,但是求出所需的解绝非易事。
实际上,除了极特殊情形外,人们不可能求出微分方程的解析解,只能用各种近似方法得到满足一定精度的近似解。
在常微分方程中已经熟悉了级数解法和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. 多步法和多级法除了亚当斯法,还有其他的多步法和多级法可以用于解常微分方程。
多步法通过利用多个点的值来逼近解,从而提高精度。
而多级法则将步长进行分割,分别计算每个子问题的解,再进行组合得到整体解。
- 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 +++=++。