数值分析(研究生)第七章常微分方程的数值解法二.
- 格式:ppt
- 大小:910.00 KB
- 文档页数:18
许多实际问题的数学模型是微分方程或微分方程的定解问题。
如物体运动、电路振荡、化学反映及生物群体的变化等。
常微分方程可分为线性、非线性、高阶方程与方程组等类;线性方程包含于非线性类中,高阶方程可化为一阶方程组。
若方程组中的所有未知量视作一个向量,则方程组可写成向量形式的单个方程。
因此研究一阶微分方程的初值问题⎪⎩⎪⎨⎧=≤≤=0)(),(y a y bx a y x f dxdy, (9-1) 的数值解法具有典型性。
常微分方程的解能用初等函数、特殊函数或它们的级数与积分表达的很少。
用解析方法只能求出线性常系数等特殊类型的方程的解。
对非线性方程来说,解析方法一般是无能为力的,即使某些解具有解析表达式,这个表达式也可能非常复杂而不便计算。
因此研究微分方程的数值解法是非常必要的。
只有保证问题(9-1)的解存在唯一的前提下,研究其数值解法或者说寻求其数值解才有意义。
由常微分方程的理论知,如果(9-1)中的),(y x f 满足条件(1)),(y x f 在区域} ),({+∞<<∞-≤≤=y b x a y x D ,上连续; (2)),(y x f 在上关于满足Lipschitz 条件,即存在常数,使得y y L y x f y x f -≤-),(),(则初值问题(9-1)在区间],[b a 上存在惟一的连续解)(x y y =。
在下面的讨论中,我们总假定方程满足以上两个条件。
所谓数值解法,就是求问题(9-1)的解)(x y y =在若干点b x x x x a N =<<<<= 210处的近似值),,2,1(N n y n =的方法。
),,2,1(N n y n =称为问题(9-1)的数值解,n n x x h -=+1称为由到1+n x 的步长。
今后如无特别说明,我们总假定步长为常量。
建立数值解法,首先要将微分方程离散化,一般采用以下几种方法: (1) 用差商近似导数在问题(9-1)中,若用向前差商hx y x y n n )()(1-+代替)(n x y ',则得)1,,1,0( ))(,()()(1-=≈-+N n x y x f hx y x y n n n n n)(n x y 用其近似值代替,所得结果作为)(1+n x y 的近似值,记为1+n y ,则有 1(,) (0,1,,1)n n n n y y hf x y n N +=+=-这样,问题(9-1)的近似解可通过求解下述问题100(,) (0,1,,1)()n n n n y y hf x y n N y y x +=+=-⎧⎨=⎩(9-2)得到,按式(9-2)由初值经过步迭代,可逐次算出N y y y ,,21。
第七章 常微分方程数值解法常微分方程中只有一些典型方程能求出初等解(用初等函数表示的解),大部分的方程是求不出初等解的。
另外,有些初值问题虽然有初等解,但由于形式太复杂不便于应用。
因此,有必要探讨常微分方程初值问题的数值解法。
本章主要介绍一阶常微分方程初值问题的欧拉法、龙格-库塔法、阿达姆斯方法,在此基础上推出一阶微分方程组与高阶方程初值问题的 数值解法;此外,还将简要介绍求解二阶常微分方程值问题的差分方法、试射法。
第一节 欧拉法求解常微分方程初值问题⎪⎩⎪⎨⎧==00)(),(y x y y x f dxdy(1)的数值解,就是寻求准确解)(x y 在一系列离散节点 <<<<<n x x x x 210 上的近似值 ,,,,,210n y y y y{}n y 称为问题的数值解,数值解所满足的离散方程统称为差分格式,1--=i i ix x h 称为步长,实用中常取定步长。
显然,只有当初值问题(1)的解存在且唯一时,使用数值解法才有意义,这一前提条件由下 面定理保证。
定理 设函数()y x f ,在区域+∞≤≤-∞≤≤y b x a D ,:上连续,且在区域D 内满足李普希兹(Lipschitz)条件,即存在正数L ,使得对于R 内任意两点()1,y x 与()2,y x ,恒有()()2121,,y y L y x f y x f -≤-则初值问题(1)的解()x y 存在并且唯一。
一、欧拉法(欧拉折线法)若将函数)xy 在点nx处的导数()n x y '用两点式代替, 即()hx y x y x y n n n )()(1-≈'+,再用n y 近似地代替()n x y ,则初值问题(1)变为⎩⎨⎧==++=+ ,2,1,0),()(001n x y y y x hf y y n n n n(2)(2)式就是著名的欧拉(Euler)公式。
以上方法称 为欧 拉法或欧拉折线法。
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 。
下面我们用数值积分法重新导出 Euler 法以及其它几种方法。
为此,在区间1[,]n n t t +上积分常微分方程(i.1a ),得11()()(,())n n t n n t u t u t f t u t dt ++=+⎰ (i.5)用各种数值积分公式计算(i.5)中的积分,便导致各种不同的差分法。
第七章 常微分方程初值问题的数值解法--------学习小结姓名 班级 学号一、 学习体会本章研究求解常微分方程初值问题的数值方法.构造数值方法主要有两条途径:基于数值积分的构造方法和基于泰勒展开的构造方法.后一种方法更灵活,也更具有一般性.泰勒展开方法还有一个优点,它在构造差分公式的同时可以得到关于截断误差的估计.常微分方程初值问题的数值解法的基本思想就是对常微分方程初值问题的数值解法,就是要算出精确解y(x)在区间[a,b]上的一系列离散节点处的函数值的近似值.数值解法需要把连续性的问题加以离散化,从而求出离散节点的数值。
本章介绍了常微分方程初值问题的基本数值解法,包括单步法和多步法。
单步法主要有欧拉法、改进欧拉法和龙格—库塔方法,多步法是Adams 法。
它们都是基于把一个连续的定解问题离散化为一个差分方程来求解,是一种步进式的方法。
用多步法求常微分方程的数值解可获得较高的精度。
实际应用时,选择合适的算法有一定的难度,既要考虑算法的简易性和计算量,又要考虑截断误差和收敛性、稳定性。
谢谢半年多来的老师和助教的辛勤劳动!二、 知识梳理7.1 常微分方程初值问题的数值解法一般概念基本思想:将初值问题离散化步长h ,取节点0,(0,1,...,)n t t nh n M =+=,且M t T ≤,则初值问题000'(,),()y f t y t t Ty t y =≤≤⎧⎨=⎩ 的数值解法的一般形式是1(,,,...,,)0,(0,1,...,)n n n n k F t y y y h n M k ++==-显式Euler 公式10(,),0,1,n n n n n y y hf t y t t nh n +=+⎧⎨=+=⎩隐式Euler 公式1110(,),0,1,n n n n n y y hf t y t t nh n +++=+⎧⎨=+=⎩7.2 显示单步法7.2.1 显示单步法的一般形式1(,,),(0,1,...,1)n n n n y y h t y h n M ϕ+=+=-单步法的局部截断误差111()()[,(),]n n n n n R y t y t h t y t h φ---=--整体截断误差()n n n y t y ε=-定理7.2.1 单步法的阶设增量函数在区域00{(,,)|,||,0}D t y h t t T y h h =≤≤<∞≤≤内对变量y 满足Lipschitz 条件,即存在常数K ,使对D 内任何两点1(,,)t u h 和2(,,)t u h ,不等式1212|(,,)(,,)|||t u h t u h K u u ϕϕ-≤-成立,那么,若单步法的局部截断误差1n R +与1(1)p h p +≥同阶,即11()p n R O h ++=,则单步法的整体截断误差1n ε+与p h 同阶,即1()p n O h ε+=。
数值分析中的常微分方程数值求解常微分方程是自然科学中一类最为普遍的数学模型,涉及到热力学、物理、化工等多个领域。
然而,解常微分方程并非易事。
尤其是当我们面对一些复杂、非线性、多维的方程组时,常微分方程数值求解成为了一个十分关键的问题。
因此,数值求解方法成为了常微分方程研究中的重要组成部分。
本文将介绍一些数值解常微分方程的常见方法和应用。
1. 一般线性方法一般线性方法(general linear methods)是经典的常微分方程数值解法之一。
它以一种特殊的形式给出步进公式:$$ y_{n+1}=\sum_{i=0}^{s-1}\alpha_i y_{n-i}+h\sum_{i=0}^{s-1}\beta_i f(t_{n-i},y_{n-i}) $$ 其中,$y_{n}$为第$n$步的项值,$f(t_n,y_n)$为时间$t_n$处函数$y(t)$的导数。
$\alpha_i$和$\beta_i$是常数,可以通过确定如下特征方程来选择:$$ \sum_{i=0}^{s-1}\alpha_i\ lambda^{i}=0,~(\lambda\in C) $$ 与此同时,也可以通过选择$\beta_i$来使方法达到一定的准确性和稳定性。
2. Runge-Kutta方法比一般线性方法更为流行的方法是Runge-Kutta方法。
通常附加一个或多个修正以获得更好的数值稳定性和误差控制。
第1阶Runge-Kutta方法仅使用导数$f(t_n,y_n)$估算下一个项的值:$$y_{n+1}=y_n+hf(t_n,y_n)$$ 许多高阶方法可以使用中间的“插值”来更准确地估计下一个步骤:$$y_{n+1}=y_n+h\sum_{i=1}^kb_ik_i$$$$k_i=f(t_n+c_ih,y_n+h\sum _{j=1}^{i-1}a_{ij}k_j)$$ $k_i$是第$i$台车的估计值,$a_{ij}$和$b_i$在经典Runge-Kutta方法和其他变体中具有不同的取值。
第七章常微分方程数值解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展开最有普遍性,可以得到任何数值解的计算公式及其局部截断误差。
常微分方程数值解法常微分方程是研究函数的导数与自变量之间的关系的数学分支,广泛应用于物理、工程、生物等领域的建模与分析。
在实际问题中,我们常常遇到无法通过解析方法求得精确解的常微分方程,因此需要利用数值解法进行求解。
本文将介绍几种常用的常微分方程数值解法。
一、欧拉方法(Euler's Method)欧拉方法是最基本的数值解法之一。
它的思想是将微分方程转化为差分方程,通过逐步逼近解的方式求得数值解。
具体步骤如下:1. 将微分方程转化为差分方程:根据微分方程的定义,可以得到差分方程形式。
2. 选择步长:将自变量范围进行离散化,确定步长h。
3. 迭代计算:根据差分方程递推公式,利用前一步的数值解计算后一步的数值解。
二、改进的欧拉方法(Improved Euler's Method)改进的欧拉方法通过使用欧拉方法中的斜率来进行更准确的数值计算。
具体步骤如下:1. 计算欧拉方法的斜率:根据当前节点的数值解计算斜率。
2. 根据斜率计算改进的数值解:将得到的斜率代入欧拉方法的递推公式中,计算改进的数值解。
三、龙格-库塔方法(Runge-Kutta Method)龙格-库塔方法是一类常微分方程数值解法,其中最著名的是四阶龙格-库塔方法。
它通过计算各阶导数的加权平均值来逼近解,在精度和稳定性方面相对较高。
具体步骤如下:1. 计算每一步的斜率:根据当前节点的数值解计算每一步的斜率。
2. 计算权重:根据斜率计算各个权重。
3. 计算下一步的数值解:根据计算得到的权重,将其代入龙格-库塔方法的递推公式中,计算下一步的数值解。
四、多步法(多步差分法)多步法是需要利用多个前面节点的数值解来计算当前节点的数值解的数值方法。
常见的多步法有Adams-Bashforth法和Adams-Moulton法。
具体步骤如下:1. 选择初始值:根据差分方程的初始条件,确定初始值。
2. 迭代计算:根据递推公式,利用前面节点的数值解计算当前节点的数值解。