第七章 常微分方程模型的数值解法
- 格式:doc
- 大小:1.79 MB
- 文档页数:31
第七章 常微分方程数值解法简介微分方程在科学和工程技术中有很广泛的应用。
许多实际问题的数学模型都可以用微分方程来描述,归结为常微分方程的定解问题;很多偏微分方程问题,也可以化为常微分方程问题来近似求解,但是求出所需的解绝非易事。
实际上,除了极特殊情形外,人们不可能求出微分方程的解析解,只能用各种近似方法得到满足一定精度的近似解。
在常微分方程中已经熟悉了级数解法和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 >是比例常数。
常微分方程中的数值方法常微分方程是数学中的一个重要分支。
它主要研究的对象是随时间变化的函数。
在实际应用中,我们需要求解这些函数的解析解,但通常情况下,解析解并不容易得到,甚至是不可能得到。
因此,我们需要使用数值方法来求解这些函数的数值近似解。
在本文中,我们将介绍常微分方程中的数值方法。
一、欧拉法欧拉法是常微分方程数值解法中最基本的一种方法。
它是根据欧拉公式推导而来的。
具体地,我们可以将一阶常微分方程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个子区间;- 在每个子区间上进行多次迭代计算,得到该子区间上解函数的近似值;- 利用近似值计算每个子区间上的斜率,并以其加权平均值逼近解函数的斜率;- 计算下一个子区间的初始条件,并进一步逼近解函数;- 重复上述过程直至达到所需的精度。
浙江大学城市学院实验报告课程名称数值计算方法实验项目名称常微分方程初值问题的数值解法 实验成绩指导老师签名日期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展开最有普遍性,可以得到任何数值解的计算公式及其局部截断误差。
第七章 常微分方程数值解法简介微分方程在科学和工程技术中有很广泛的应用。
许多实际问题的数学模型都可以用微分方程来描述,归结为常微分方程的定解问题;很多偏微分方程问题,也可以化为常微分方程问题来近似求解,但是求出所需的解绝非易事。
实际上,除了极特殊情形外,人们不可能求出微分方程的解析解,只能用各种近似方法得到满足一定精度的近似解。
在常微分方程中已经熟悉了级数解法和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 +++=++。