常微分数值解

合集下载

求常微分方程的数值解

求常微分方程的数值解

求常微分方程的数值解一、背景介绍常微分方程(Ordinary Differential Equation,ODE)是描述自然界中变化的数学模型。

常微分方程的解析解往往难以求得,因此需要寻找数值解来近似地描述其行为。

求解常微分方程的数值方法主要有欧拉法、改进欧拉法、龙格-库塔法等。

二、数值方法1. 欧拉法欧拉法是最简单的求解常微分方程的数值方法之一。

它基于导数的定义,将微分方程转化为差分方程,通过迭代计算得到近似解。

欧拉法的公式如下:$$y_{n+1}=y_n+f(t_n,y_n)\Delta t$$其中,$y_n$表示第$n$个时间步长处的函数值,$f(t_n,y_n)$表示在$(t_n,y_n)$处的导数,$\Delta t$表示时间步长。

欧拉法具有易于实现和理解的优点,但精度较低。

2. 改进欧拉法(Heun方法)改进欧拉法又称Heun方法或两步龙格-库塔方法,是对欧拉法进行了精度上提升后得到的一种方法。

它利用两个斜率来近似函数值,并通过加权平均来计算下一个时间步长处的函数值。

改进欧拉法的公式如下:$$k_1=f(t_n,y_n)$$$$k_2=f(t_n+\Delta t,y_n+k_1\Delta t)$$$$y_{n+1}=y_n+\frac{1}{2}(k_1+k_2)\Delta t$$改进欧拉法比欧拉法精度更高,但计算量也更大。

3. 龙格-库塔法(RK4方法)龙格-库塔法是求解常微分方程中最常用的数值方法之一。

它通过计算多个斜率来近似函数值,并通过加权平均来计算下一个时间步长处的函数值。

RK4方法是龙格-库塔法中最常用的一种方法,其公式如下:$$k_1=f(t_n,y_n)$$$$k_2=f(t_n+\frac{\Delta t}{2},y_n+\frac{k_1\Delta t}{2})$$ $$k_3=f(t_n+\frac{\Delta t}{2},y_n+\frac{k_2\Delta t}{2})$$ $$k_4=f(t_n+\Delta t,y_n+k_3\Delta t)$$$$y_{n+1}=y_n+\frac{1}{6}(k_1+2k_2+2k_3+k_4)\Delta t$$三、数值求解步骤对于给定的常微分方程,可以通过以下步骤求解其数值解:1. 确定初值条件:确定$t=0$时刻的函数值$y(0)$。

1. 常微分方程数值解的几种离散格式

1. 常微分方程数值解的几种离散格式

常微分方程数值求解初步常微分方程数值求解初步1.常微分方程求解的几种离散格式2.常微分方程数值解的几个基本理论问题3.龙格库塔(Runge-Kutta)方法4.龙格库塔(Runge-Kutta)方法的应用1. 常微分方程求解的几种离散格式常微分方程数值求解离散格式一阶常微分方程的初值问题,其一般形式:()[](){}(){}()0121+1110,,,0,1,,12,,().n i i i i i i n i i n i i i i i i T x x x x T h x x i n h x x x y y y x y x +===<<<<==-=-分割:0 令称为由到的步长.在节点采用离散化方法将初值问题1转化为关于离散变量的问题.作为的近似值,求得的就是初值问题1在节点数值解法的基本思想:的数值解10(,)0(1)(0)dy f x y x T dxy a ⎧=⎪≤≤⎨⎪=⎩常微分方程数值求解离散格式()1初值问题欧拉方法11000,1,,1(,)()k k k k k k k k k k y y h f h x x k n f f x y y a a ++=+⎧⎪=-⎪=-⎨=⎪⎪=⎩1()k k y x x x Taylor +=将在点进行展开得:()211()()()(,()),[,]2!()(,()1).1k k k k k k k k k k k k k k y y x y x h f x y x h x x y x h f x y x ξξ++''=++∈≈+0(,)0(1)(0)dy f x y x T dxy a ⎧=⎪≤≤⎨⎪=⎩121111()1()()(,())(),[,]2!k k k k k k k k k k k k y x x y x y x h f x y x y h x x ηη+++++''=-+∈将在展开得21111111,,(,)(),()(,()),k k k k k k k k k k h y y f f x y y x y x f x y x +++++++=忽略对应的高阶项,用近似和可得计算公式()11100(,)0,1,,1k k k k k y y h f x y y a k n b +++=+⎧⎪=⎨⎪=-⎩()111,,,.k k k b y y y Euler +++右端也含有因此它是关于的一个函数方程需隐式要解方程才能得到因此称其方法为()2(1)初值问题的隐式欧拉方法()3(1),利用梯形求积公式对式两边进行积分并将近似取为等号可得()11100[(,)(,)]20,1,,1k k k k k k k h y y f x y f x y y a k n c +++⎧=++⎪⎪=⎨⎪=-⎪⎩.这种方法称为梯形方法1111[(,)(,)2(,)k k k k x x x k k k x k k dy dx f x y h f x y y x dx f x d ++++⎛⎫=≈ ⎪⎝⎭+⎰⎰(0)11,k k y y ++用显式Euler方法所得的作为用梯形方法改进一次Euler -此式称为预估校正方法,或称为改进Euler方法.111001=(,)[(,)(,)]()20,1,, 1.k k k k k k k k k k k k y y h f x y h y y f x y f x y d k n y a +++++⎧⎪⎪=++⎪⎨⎪⎪=-⎪⎩=()4(1)初值问题的预估校正方法sin d cos d (0)1ex y y x x y y ⎧=⎪⎨⎪=⎩=精确解常微分方程数值求解离散格式[]0,25π区间等分[]0,2π区间10等分[]0,2π区间20等分[]0,2π区间40等分。

常微分方程数值解

常微分方程数值解

常微分方程数值解常微分方程数值解是数学中的一门重要学科,主要研究如何求解常微分方程,在科学计算中有着重要的应用。

常微分方程模型是自然界中广泛存在的现象描述方法,有着广泛的应用领域。

比如,在物理学中,运动中的物体的位置、速度和加速度随时间的关系就可以通过微分方程描述;在经济学中,经济变化随时间的变化也可以用微分方程来描述。

而常微分方程数值解的求解方法则提供了一种快速、高效的计算手段。

一、常微分方程数值解的基本概念常微分方程就是一个描述自变量(通常是时间)与其导数之间关系的方程。

其一般形式如下:$\frac{dy}{dt} = f(y,t)$其中 $f(y,t)$ 是一个已知的函数。

常微分方程数值解就是对于一个常微分方程,对其进行数字计算求解的方法。

常微分方程数值解常使用数值积分的方法来求解。

由于常微分方程很少有解析解,因此数值解的求解方法显得尤为重要。

二、常微分方程数值解的求解方法常微分方程数值解的求解方法很多,以下介绍其中两种方法。

1.欧拉法欧拉法是最简单的一种数值算法,其思想是通过将一个微分方程转化为一个数值积分方程来求解。

其数值积分方程为:$y_{i+1}=y_i+hf(y_i,t_i)$其中 $h$ 为步长,可以理解为每次计算的间隔。

欧拉法的主要缺点是其精度比较低,收敛速度比较慢。

因此,当需要高精度的数值解时就需要使用其他的算法。

2.级数展开方法级数展开法是通过将一个待求解的微分方程进行Taylor级数展开来求解。

通过对Taylor级数展开的前若干项进行求和,可以得到微分方程与其解的近似解。

由于级数展开法的收敛速度很快,因此可以得到相对较高精度的数值解。

但是,当级数过多时,会出现截断误差。

因此,在实际应用中需要根据所需精度和计算资源的限制来选择适当的级数。

三、常微分方程数值解的应用常微分方程数值解在现代科学技术中有着广泛的应用。

以下介绍其中两个应用领域。

1.物理建模常微分方程的物理建模是常见的应用领域。

常微分方程数值解法_OK

常微分方程数值解法_OK

y(xi )
O(h3)][yi
hf
(xi ,
yi )]
h2 2
y(xi ) O(h3 )
O(h2 )
欧拉法具有 1 阶精度。4
2. 隐式 Euler法
用向后差商公式代替导数项
y(xi1 ) h
y(xi )
y' (xi1 )
h 2
y' ' ( i
)
y(xi1 ) h
y(xi )
f (xi1, y(xi1 ))
i1 y(xi1 ) yi1 O(h3f)x ( x, y) f y ( x, y) f ( x, y) Step 1: 将 K2 在 ( xi , yi ) 点作 Taylor 展开
K2 f (xi ph, yi phK1)
f (xi , yi ) phfx (xi , yi ) phK1 f y (xi , yi ) O(h2 ) y(xi ) phy(xi ) O(h 2 )
f
(
xi
1
,
y(
xi
1
))]
h3 12
f
''( )
所以,有格式为:
yi1
yi
h[ f 2
(xi , yi )
f
(xi1, yi1 )]
上式称为梯形格式。
类似,可以算出梯形格式的误差估计式:
i1 O(h3 )
2阶的方法
梯形法是二阶、隐式单步的方法,要用迭代法求解。怎么求?
8
改进欧拉格式 /* modified Euler’s Formula */
xi1, yi h f ( xi , yi )
(i 0, ..., n 1)

常微分方程的数值解法(欧拉法、改进欧拉法、泰勒方法和龙格库塔法)

常微分方程的数值解法(欧拉法、改进欧拉法、泰勒方法和龙格库塔法)

[例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处的数值解,并与精确解进行比较。

常微分方程数值解法

常微分方程数值解法

ρ ρ
n+1 n
≤1
三、梯形公式
由 分 径 y ( xn+1) = y ( xn) + 积 途 : xn+1

f ( x, y)dt

积分 梯形 式 且令:yn+1 = y( xn+1), yn = y( xn) 用 公 , h 则 yn+1 = yn + ( f (xn , yn) + f (xn+1 , yn+1)) 得: 2
第九章 常微分方程数值解法
§1 、引言
一 常 分 程 初 问 : 阶 微 方 的 值 题 dy dx = f (x, y) y( x0) = y0
'
a ≤ x ≤b
2 y 例 : 方 程 xy -2 y = 4 x ⇒ y = + 4 x 2 y 令 :f ( x , y ) = + 4 且 给 出 初 值 y (1 )= -3 x 就 得 到 一 阶 常 微 分 方 程 的 初 值 问 题 : 2 y dy = f (x, y) = + 4 dx x y(1) = − 3
n n n n n 2 // n n+1
~
y
n+1
= yn + hf ( xn, yn ) = y(xn) + hf
n+1
~
y
n+1
( x , y( x ))
n n
则 T = y( x ) − = h y (ξ ) x y 2 ~
// n+1 n+1
2
n
< ξ < xn+1

常微分方程组数值解法

常微分方程组数值解法

常微分方程组数值解法一、引言常微分方程组是数学中的一个重要分支,它在物理、工程、生物等领域都有广泛应用。

对于一些复杂的常微分方程组,往往难以通过解析方法求解,这时候数值解法就显得尤为重要。

本文将介绍常微分方程组数值解法的相关内容。

二、数值解法的基本思想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. 多步法和多级法除了亚当斯法,还有其他的多步法和多级法可以用于解常微分方程。

多步法通过利用多个点的值来逼近解,从而提高精度。

而多级法则将步长进行分割,分别计算每个子问题的解,再进行组合得到整体解。

常微分方程的数值解与解析解

常微分方程的数值解与解析解

一、 常微分方程的解析解常微分方程的解析解也就是常微分方程的精确解,也称为常微分方程的符号解;一般可理解为求微分方程的通解或者特解的解析式或表达式;但只有少数的微分方程存在解析解。

在MA TLAB 中,由函数dsolve()求解常微分方程(组)的解析解,其具体格式如下: X=dsolve(‘方程1’,‘方程2’,…‘方程n ’,‘初始条件’,‘自变量’)函数dsolve 用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解。

例1:求解常微分方程1dy dx x y =+的MA TLAB 程序为:dsolve('Dy=1/(x+y)','x'),注意,系统缺省的自变量为t ,因此这里要把自变量写明。

结果为:-lambertw(-C1*exp(-x-1))-x-1其中:Y=lambertw(X)表示函数关系Y*exp(Y)=X 。

例2:求解常微分方程2'''0yy y -=的MA TLAB 程序为:Y2=dsolve('y*D2y-Dy^2=0’,’x’) 结果为:Y2 =[ exp((x+C2)/C1)][ C2]我们看到有两个解,其中一个是常数。

例3:求常微分方程组253t tdx x y e dt dy x y e dt ⎧++=⎪⎪⎨⎪--=⎪⎩通解的MA TLAB 程序为:[X,Y]=dsolve('Dx+5*x+y=exp(t),Dy-x-3*y=exp(2*t)','t')例4:求常微分方程组020210cos ,224,0t t t dx dy x t x dt dt dx dy y e y dt dt =-=⎧+-==⎪⎪⎨⎪++==⎪⎩通解的MA TLAB 程序为:[X,Y]=dsolve('Dx+2*x-Dy=10*cos(t),Dx+Dy+2*y=4*exp(-2*t)','x(0)=2','y(0)=0')二、 常微分方程的数值解在生产和科研中所处理的微分方程往往很复杂且大多得不出一般解。

常微分方程的数值解法全文

常微分方程的数值解法全文

第8章常微分方程的数值解法8.4单步法的收敛性与稳定性8.4.1相容性与收敛性上面所介绍的方法都是用离散化的方法,将微分方程初值问题化为差分方程初值问题求解的.这些转化是否合理?即当h →∞时,差分方程是否能无限逼近微分方程,差分方程的解n y 是否能无限逼近微分方程初值问题的准确解()n y x ,这就是相容性与收敛性问题.用单步法(8.3.14)求解初值问题(8.1.1),即用差分方程初值问题100(,,)()n n n n y y h x y h y x y ϕ+=+⎧⎨=⎩(8.4.1)的解作为问题(8.1.1)的近似解,如果近似是合理的,则应有()()(,(),)0 (0)y x h y x x y x h h hϕ+--→→(8.4.2)其中()y x 为问题(8.1.1)的精确解.因为0()()lim ()(,)h y x h y x y x f x y h→+-'==故由(8.4.2)得lim (,,)(,)h x y h f x y ϕ→=如果增量函数(,(),)x y x h ϕ关于h 连续,则有(,,0)(,)x y f x y ϕ=(8.4.3)定义8.3如果单步法的增量函数(,,)x y h ϕ满足条件(8.4.3),则称单步法(8.3.14)与初值问题(8.1.1)相容.通常称(8.4.3)为单步法的相容条件.满足相容条件(8.4.3)是可以用单步法求解初值问题(8.1.1)的必要条件.容易验证欧拉法和改进欧拉法均满足相容性条件.一般地,如果单步法有p 阶精度(1p ≥),则其局部截断误差为[]1()()(,(),)()p y x h y x h x y x h O h ϕ++-+=上式两端同除以h ,得()()(,,)()p y x h y x x y h O h hϕ+--=令0h →,如果(,(),)x y x h ϕ连续,则有()(,,0)0y x x y ϕ'-=所以1p ≥的单步法均与问题(8.1.1)相容.由此即得各阶龙格-库塔法与初值问题(8.1.1)相容.定义8.4一种数值方法称为是收敛的,如果对于任意初值0y 及任意固定的(,]x a b ∈,都有lim () ()n h y y x x a nh →==+其中()y x 为初值问题(8.1.1)的精确解.如果我们取消局部化假定,使用某单步法公式,从0x 出发,一步一步地推算到1n x +处的近似值1n y +.若不计各步的舍入误差,而每一步都有局部截断误差,这些局部截断误差的积累就是整体截断误差.定义8.5称111()n n n e y x y +++=-为某数值方法的整体截断误差.其中()y x 为初值问题(8.1.1)的精确解,1n y +为不计舍入误差时用某数值方法从0x 开始,逐步得到的在1n x +处的近似值(不考虑舍入误差的情况下,局部截断误差的积累).定理8.1设单步法(8.3.14)具有p 阶精度,其增量函数(,,)x y h ϕ关于y 满足利普希茨条件,问题(8.1.1)的初值是精确的,即00()y x y =,则单步法的整体截断误差为111()()p n n n e y x y O h +++=-=证明由已知,(,,)x y h ϕ关于y 满足利普希茨条件,故存在0L >,使得对任意的12,y y 及[,]x a b ∈,00h h <≤,都有1212(,,)(,,)x y h x y h L y y ϕϕ-≤-记1()(,(),)n n n n y y x h x y x h ϕ+=+,因为单步法具有p 阶精度,故存在0M >,使得1111()p n n n R y x y Mh ++++=-≤从而有111111111()()()(,(),)(,,)()(,(),)(,,)n n n n n n n p n n n n n n p n n n n n n e y x y y x y y y Mh y x h x y x h y h x y h Mh y x y h x y x h x y h ϕϕϕϕ+++++++++=-≤-+-≤++--≤+-+-1(1)p nMh hL e +≤++反复递推得11111101110(1)(1)1(1)(1)(1)(1)1(1)p p n n n p n n p n e Mh hL Mh hL e hL hL Mh hL e hL Mh hL e hL+++-+++++⎡⎤≤++++⎣⎦⎡⎤≤+++++++⎣⎦+-≤++因为00()y x y =,即00e =,又(1)n h b a +≤-,于是ln(1)1()(1)(1)b a b a hL n L b a h h hL hL e e --++-+≤+=≤所以()11()p L b a p n M e h e O h L -+⎡⎤≤-=⎣⎦推论设单步法具有p (1p ≥)阶精度,增量函数(,,)x y h ϕ在区域G :, , 0a x b y h h ≤≤-∞<<+∞≤≤上连续,且关于y 满足利普希茨条件,则单步法是收敛的.当(,)f x y 在区域:,D a x b y ≤≤-∞<<+∞上连续,且关于y 满足利普希茨条件时,改进欧拉法,各阶龙格-库塔法的增量函数(,,)x y h ϕ在区域G 上连续,且关于y 满足利普希茨条件,因而它们都是收敛的.关于单步法收敛的一般结果是:定理8.2设增量函数(,,)x y h ϕ在区域G 上连续,且关于y 满足利普希茨条件,则单步法收敛的充分必要条件是相容性条件(8.4.3).8.4.2稳定性稳定性与收敛性是两个不同的概念,收敛性是在假定每一步计算都准确的前提下,讨论当步长0h →时,方法的整体截断误差是否趋于零的问题.而稳定性则是讨论舍入误差的积累能否对计算结果有严重影响的问题.定义8.6若一种数值方法在节点值n y 上有一个大小为δ的扰动,于以后各节点()m y m n >上产生的偏差均不超过δ,则称该方法是稳定的.我们以欧拉法为例进行讨论.假设由于舍入误差,实际得到的不是n y 而是n n n y y δ=+,其中n δ是误差.由此再计算一步,得到1(,)n n n n y y hf x y +=+把它与不考虑舍入误差的欧拉公式相减,并记111n n n y y δ+++=-,就有[]1(,)(,)1(,)n n n n n n y n nh f x y f x y hf x δδηδ+⎡⎤=+-=+⎣⎦其中y f f y∂=∂.如果满足条件1(,)1y n hf x η+≤,(8.4.4)则从n y 到1n y +的计算,误差是不增的,可以认为计算是稳定的.如果条件(8.4.4)不满足,则每步误差将增大.当0y f >时,显然条件(8.4.4)不可能满足,我们认为问题本身具有先天的不稳定性.当0y f <时,为了满足稳定性要求(8.4.4),有时h 要很小.一般的,稳定性与方法有关,也与步长h 的大小有关,当然也与方程中的(,)f x y 有关.为简单起见,通常只考虑数值方法用于求解模型方程的稳定性,模型方程为y y λ'=(8.4.5)其中λ为复数.一般的方程可以通过局部线性化转化为模型方程,例如在(,)x y 的邻域(,)(,)(,)()(,)()x y y f x y f x y f x y x x f x y y y '==+-+-+略去高阶项,再作变量替换就得到u u λ'=的形式.对于模型方程(8.4.5),若Re 0λ>,类似以上分析,可以认为方程是不稳定的.所以我们只考虑Re 0λ<的情形,这时不同的数值方法可能是数值稳定的或者是数值不稳定的.当一个单步法用于试验方程y y λ'=,从n y 计算一步得到1()n n y E h y λ+=(8.4.6)其中()E h λ依赖于所选的方法.因为通过点(,)n n x y 试验方程的解曲线(它满足,()n n y y y x y λ'==)为[]exp ()n n y y x x λ=-,而一个p 阶单步法的局部截断误差在()n n y x y =时有1111()()p n n n T y x y O h ++++=-=,所以有1exp()()()p n n y h E h y O h λλ+-=(8.4.7)这样可以看出()E h λ是h e λ的一个近似值.由(8.4.6)可以看到,若n y 计算中有误差ε,则计算1n y +时将产生误差()E h λε,所以有下面定义.定义8.7如果(8.4.6)式中,()1E h λ<,则称单步法(8.3.14)是绝对稳定的.在复平面上复变量h λ满足()1E h λ<的区域,称为方法(8.3.14)的绝对稳定区域,它与实轴的交称为绝对稳定区间.在上述定义中,规定严格不等式成立,是为了和线性多步法的绝对稳定性定义一致.事实上,()1E h λ=时也可以认为误差不增长.(1)欧拉法的稳定性欧拉法用于模型方程(8.4.5),得1(1)n n y h y λ+=+,所以有()1E h h λλ=+.所以绝对稳定条件是11h λ+<,它的绝对稳定区域是h λ复平面上以(1,0)-为中心的单位圆,见图8.3.而λ为实数时,绝对稳定区间是(2,0)-.Im()h λRe()h λ2-1-O 图8.3欧拉法的绝对稳定区域(2)梯形公式的稳定性对模型方程,梯形公式的具体表达式为11()2n n n n h y y y y λλ++=++,即11212n nh y y h λλ++=-,所以梯形公式的绝对稳定区域为12112h h λλ+<-.化简得Re()0h λ<,因此梯形公式的绝对稳定区域为h λ平面的左半平面,见图8.4.特别地,当λ为负实数时,对任意的0h >,梯形公式都是稳定的.Im()h λRe()h λO 图8.4梯形公式的绝对稳定区域(3)龙格-库塔法的稳定性与前面的讨论相仿,将龙格-库塔法用于模型方程(8.4.5),可得二、三、四阶龙格-库塔法的绝对稳定区域分别为211()12h h λλ++<23111()()126h h h λλλ+++<2341111()()()12624h h h h λλλλ++++<当λ为实数时,二、三、四阶显式龙格-库塔法的绝对稳定区域分别为20h λ-<<、2.510h λ-<<、 2.780h λ-<<.例8.5设有初值问题21010101(0)0xy y x x y ⎧'=-≤≤⎪+⎨⎪=⎩用四阶经典龙格-库塔公式求解时,从绝对稳定性考虑,对步长h 有何限制?解对于所给的微分方程有2100,(010)1f x x y xλ∂==-<≤≤∂+在区间[0,10]上,有201010max ||max51t x x λ<<==+由于四阶经典龙格-库塔公式的绝对稳定区间为 2.7850h λ-<<,则步长h 应满足00.557h <<.。

常微分方程初值问题的数值解法

常微分方程初值问题的数值解法

常微分方程初值问题数值解法初值问题:即满足初值条件的常微分方程的解y′=f(x,y),x∈[x0,b]y(x0)=y0.定理1(利普希茨条件)若存在正数L,使得对任意,y1,y2,有|f(x,y1)−f(x,y2)|≤L|(y1−y2)|定理2(解存在性)①若函数f在方区域x∈[a,b],y∈R连续,②函数f关于y 满足利普希茨条件,则对任意x∈[a,b],常微分方程存在唯一的连续可微数值解.两类问题:①单步法---计算下一个点的值yn+1只需要用到前面一个点的值yn②多步法---计算下一个点的值yn+1需要用到前面l个点的值yl1、欧拉法---下一个点的计算值等于前一个点的计算值加上步长乘以前一个点的函数值•具体过程一些批注:显式欧拉方程指下一步要计算的值,不在迭代方程中;隐式欧拉方程指下一步要计算的值,在迭代方程中。

怎么计算隐式欧拉方程----要借助显示欧拉迭代计算---一般用迭代法-----迭代---将微分方程在区间[xn,xn+1]进行积分,然后函数f进行近似,即可得到迭代方程-----迭代方程收敛性?由函数关于y满足利普希茨条件,可以推出迭代公式收敛。

•局部截断误差:假设前n步误差为0,我们计算第n+1步的误差,将次误差称为局部截断误差,且局部误差为O(hp+1)•p阶精度:由理论证明:若局部误差阶的时间复杂度为O(hp+1),则整体误差阶为O(hp)我们称公式精度为p。

•显示欧拉法与隐式欧拉法•梯形方法----将显式欧拉迭代方程与隐式欧拉迭代方程做一下加权平均,构造的计算公式.•改进的欧拉方法---思想:因为梯形公式是隐式公式,将显式欧拉公式对下一步的计算值进行预估,用梯形公式对下一步的计算值进行校正.2、龙格-库塔方法思想:根据Lagrange中值定理,下一次的计算值可以用前一次的计算值加上h乘以前一个点的斜率;而这个斜率用该区间上的多个点的斜率的算数平均来逼近。

注意:怎么计算任意斜率Ki?第i个点的斜率Ki有微分方程可以算出f′=f(xn,yn)所以要算的f(xn,yn)值,由欧拉法即可算出, yn+1=yn+hf′•2阶-龙格-库塔方法----类似改进的欧拉法根据Lagrange中值定理,下一次的计算值可以用前一次的计算值加上h乘以斜率;而这个斜率用区间上的端点和中点的斜率的算数平均来逼近。

第九章 常微分方程数值解

第九章 常微分方程数值解



k 0, 1, 2,...
( ( 应用改进欧拉法,如果序列 yn0)1 , yn1)1 , 收敛,它的极限便
满足方程
y n 1 h yn f ( xn , yn ) f ( xn1 , yn1 ) 2
3.公式的截断误差
二元泰勒公式: 设 z=f(x,y) 在点 ( x 0 , y 0 ) 的某一邻域内连续且直到有n+1阶
首先希望能确定系数 1、2、p,使得到的算法格式有2阶 dy f x ( x, y) yi y( x i ) 的前提假设下,使得 f y ( x , y ) 精度,即在 dx 3 Ri y( xi 1 ) yi 1 Oh ( x , y ) f ( x , y ) f ( x , y ) ( f )
2
Q: 为获得更高的精度,应该如何进一步推广?
yi1 yi h[ 1 K1 2 K2 ... m Km] K1 f ( xi , yi ) K2 f ( xi 2 h, yi 21 hK1 ) K3 f ( xi 3 h, yi 31 hK1 32 hK2 )
最常用为四级4阶经典龙格-库塔法
4 阶龙格――库塔法
h y n 1 y n ( k1 2 k 2 2 k 3 k 4 ) 6 k1 f ( x n , y n ) 1 h k 2 f x n h, y n k1 2 2 1 h k 3 f x n h, y n k 2 2 2 k f x h, y hk n n 3 4
y( x ) y0 f (t , y(t ))dt
x0
x
是等价的,当x = x1时,

常微分方程数值解法

常微分方程数值解法

第八章 常微分方程的数值解法一.内容要点考虑一阶常微分方程初值问题:⎪⎩⎪⎨⎧==00)(),(y x y y x f dx dy微分方程的数值解:设微分方程的解y (x )的存在区间是[a,b ],在[a,b ]内取一系列节点a= x 0< x 1<…< x n =b ,其中h k =x k+1-x k ;(一般采用等距节点,h=(b-a)/n 称为步长)。

在每个节点x k 求解函数y(x)的近似值:y k ≈y(x k ),这样y 0 , y 1 ,...,y n 称为微分方程的数值解。

用数值方法,求得f(x k )的近似值y k ,再用插值或拟合方法就求得y(x)的近似函数。

(一)常微分方程处置问题解得存在唯一性定理对于常微分方程初值问题:⎪⎩⎪⎨⎧==00)(),(y x y y x f dx dy如果:(1) 在B y y A x x 00≤-≤≤,的矩形内),(y x f 是一个二元连续函数。

(2) ),(y x f 对于y 满足利普希茨条件,即2121y y L y x f y x f -≤-),(),(则在C x x 0≤≤上方程⎪⎩⎪⎨⎧==00)(),(y x y y x f dxdy的解存在且唯一,这里C=min((A-x 0),x 0+B/L),L 是利普希茨常数。

定义:任何一个一步方法可以写为),,(h y x h y y k k k 1k Φ+=+,其中),,(h y x k k Φ称为算法的增量函数。

收敛性定理:若一步方法满足: (1)是p 解的.(2) 增量函数),,(h y x k k Φ对于y 满足利普希茨条件.(3) 初始值y 0是精确的。

则),()()(p h O x y kh y =-kh =x -x 0,也就是有0x y y lim k x x kh 0h 0=--=→)((一)、主要算法 1.局部截断误差局部截断误差:当y(x k )是精确解时,由y(x k )按照数值方法计算出来的1~+k y 的误差y (x k+1)- 1~+k y 称为局部截断误差。

常微分方程的数值解法

常微分方程的数值解法

数值计算方法
都是一次的,则y称它, y是线, 性的, ,y否(n则) 称为非线性的。
在高等数学中,对于常微分方程的求解,给出 了一些典型方程求解析解的基本方法,如可分离变 量法、常系数齐次线性方程的解法、常系数非齐次 线性方程的解法等。但能求解的常微分方程仍然是 有限的,大多数的常微分方程是不可能给出解析解。 譬如
y x2 y2
这个一阶微分方程就不能用初等函数及其积 分来表达它的解。
再如,方程
y y
y
(0)
1
的解 y e x ,虽然有表可查,但对于表 上没有给出 e x 的值,仍需插值方法来
计算
从实际问题当中归纳出来的微分方程,通常主要依
靠数值解法来解决ቤተ መጻሕፍቲ ባይዱ本章主要讨论一阶常微分方程
初值问题
y f (x, y)
y
(
x0
)
y0
( 7.1 )
在区间a ≤ x ≤ b上的数值解法。
可以证明,如果函数在带形区域 R=a≤x≤b,
-∞<y<∞}内连续,且关于y满足李普希兹
(Lipschitz)条件,即存在常数L(它与x,y无关)使
f (x, y1) f (x, y2 ) L y1 y2
对R内任意两个 y1, y2 都成立,则方程( 7.1 )的解 y y(x) 在a, b上存在且唯一。
数值计算方法
常微分方程的数值解法
包含自变量、未知函数及未知函数的导数或微 分的方程称为微分方程。在微分方程中, 自变量的 个数只有一个, 称为常微分方程.。自变量的个数 为两个或两个以上的微分方程叫偏微分方程。微分 方程中出现的未知函数最高阶导数的阶数称为微分 方程的阶数。如果未知函数y及其各阶导数

常微分方程数值解实验报告

常微分方程数值解实验报告

常微分方程数值解实验报告学院:数学与信息科学专业:信息与计算科学:思义学号:201216524 课程:常微分方程数值解实验一:常微分方程的数值解法1、分别用Euler 法、改进的Euler 法(预报校正格式)和S —K 法求解初值问题。

(h=0.1)并与真解作比较。

⎩⎨⎧=++-=10(1y')y x y 1.1实验代码:%欧拉法function [x,y]=naeuler(dyfun,xspan,y0,h)%dyfun 是常微分方程,xspan 是x 的取值围,y0是初值,h 是步长 x=xspan(1):h:xspan(2); y(1)=y0; for n=1:length(x)-1y(n+1)=y(n)+h*feval(dyfun,x(n),y(n)); end%改进的欧拉法function [x,m,y]=naeuler2(dyfun,xspan,y0,h)%dyfun 是常微分方程,xspan 是x 的取值围,y0是初值,h 是步长。

%返回值x 为x 取值,m 为预报解,y 为校正解 x=xspan(1):h:xspan(2); y(1)=y0;m=zeros(length(x)-1,1); for n=1:length(x)-1 k1=feval(dyfun,x(n),y(n)); y(n+1)=y(n)+h*k1; m(n)=y(n+1);k2=feval(dyfun,x(n+1),y(n+1));y(n+1)=y(n)+h*(k1+k2)/2;end%四阶S—K法function [x,y]=rk(dyfun,xspan,y0,h)%dyfun是常微分方程,xspan是x的取值围,y0是初值,h是步长。

x=xspan(1):h:xspan(2);y(1)=y0;for n=1:length(x)-1k1=feval(dyfun,x(n),y(n));k2=feval(dyfun,x(n)+h/2,y(n)+(h*k1)/2);k3=feval(dyfun,x(n)+h/2,y(n)+(h*k2)/2);k4=feval(dyfun,x(n)+h,y(n)+h*k3);y(n+1)=y(n)+(h/6)*(k1+2*k2+2*k3+k4);end%主程序x=[0:0.1:1];y=exp(-x)+x;dyfun=inline('-y+x+1');[x1,y1]=naeuler(dyfun,[0,1],1,0.1);[x2,m,y2]=naeuler2(dyfun,[0,1],1,0.1);[x3,y3]=rk(dyfun,[0,1],1,0.1);plot(x,y,'r',x1,y1,'+',x2,y2,'*',x3,y3,'o');xlabel('x');ylabel('y');legend('y为真解','y1为欧拉解','y2为改进欧拉解','y3为S—K解','Location','NorthWest');1.2实验结果:x 真解y 欧拉解y1 预报值m 校正值y2 S—K解y30.0 1.0000 1.0000 1.0000 1.00000.1 1.0048 1.0000 1.0000 1.0050 1.00480.2 1.0187 1.0100 1.0145 1.0190 1.01870.3 1.0408 1.0290 1.0371 1.0412 1.04080.4 1.0703 1.0561 1.0671 1.0708 1.07030.5 1.1065 1.0905 1.1037 1.1071 1.10650.6 1.1488 1.1314 1.1464 1.1494 1.14880.7 1.1966 1.1783 1.1945 1.1972 1.19660.8 1.2493 1.2305 1.2475 1.2500 1.24930.9 1.3066 1.2874 1.3050 1.3072 1.30661.0 1.3679 1.3487 1.3665 1.3685 1.36792、选取一种理论上收敛但是不稳定的算法对问题1进行计算,并与真解作比较。

计算方法 第6章 常微分方程数值解

计算方法 第6章 常微分方程数值解

已知Euler格式 yn1 yn hf ( xn , yn )
h2 y( xn1 ) yn1 2 y''( xn )
即Euler格式具有一阶精度
如果令
y( xn1 ) y( xn1 ) 2h

y'( xn )
f ( xn , yn )
并假定 y( xn1 ) yn1, y( xn ) yn
常微分方程数值解
常微分方程的数值解法
§1 引 言 §2 欧拉方法 §3 龙格-库塔方法
2
§1 引 言
在工程和科学技术的实际问题中,常需要解常微 分方程。但常微分方程组中往往只有少数较简单和典 型的常微分方程(例如线性常系数常微分方程等)可 求出其解析解。对于变系数常微分方程的解析求解就 比较困难,而一般的非线性常微分方程就更不用说了。 在大多数情况下,常微分方程只能用近似法求解。这 种近似解法可分为两大类:一类是近似解析法,如级 数解法、逐次逼近法等;另一类则是数值解法,它给 出方程在一些离散点上的近似解。
yn
2
xn yn

令 h 0.1 将 x0 0, y0 1 代入Euler格式
步进计算结果见P106表5.1
第五章:常微分方程数值解
Euler值
y 1 2x
第五章:常微分方程数值解
Euler格式的误差分析
pn1
事实上Euler格式的每一步都存在误差,为了方便讨论y算( x)

d2x
dt 2 x(t
0
c
m )
x x
0
0 (t

t) 0

x(t ) x
0
0
5

常微分方程数值解法

常微分方程数值解法

常微分方程数值解法常微分方程是研究函数的导数与自变量之间的关系的数学分支,广泛应用于物理、工程、生物等领域的建模与分析。

在实际问题中,我们常常遇到无法通过解析方法求得精确解的常微分方程,因此需要利用数值解法进行求解。

本文将介绍几种常用的常微分方程数值解法。

一、欧拉方法(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. 迭代计算:根据递推公式,利用前面节点的数值解计算当前节点的数值解。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

6.1 MATLAB中常微分方程求解函数 MATLAB中常微分方程求解函数
6.1.1 常微分方程符号解函数 一阶常微分方程式(first一阶常微分方程式(first-order ordinary differential equation,ODE),可写成 equation,ODE),可写成 y ′ = g ( x, y ) 其中 x 是独立变量,而 y 是 x 的函数。它的解是 y = f ( x, y ) 该解可以满足 y′ = f ′( x, y ) = g ( x, y ) ,在初始条件, y ( x0 ) = y0 下,可以得到唯一解。
>>[x2,y2]=ode45('exam64fun',[0:0.1:1],1) 输出结果为 x2 = 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000 y2 = 1.0000 0.9006 0.8046 0.7144 0.6315 0.5563 0.4892 0.4296 0.3772 0.3312 0.2910
1.0000 0.9006 0.8046 0.7144 0.6315 0.5563 0.4892 0.4296 0.3772 0.3312 0.2910
先将微分方程写成自定义函数exam64fun.m。 先将微分方程写成自定义函数exam64fun.m。 function f=exam64fun(x,y) f=-y-x.*y.^2; f=然后在命令窗口中输入以下命令: >>[x1,y1]=ode23('exam64fun',[0:0.1:1],1) 输出结果为 x1 = 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000 y1 = 1.0000 0.9006 0.8046 0.7144 0.6314 0.5563 0.4892 0.4296 0.3772 0.3312 0.2910
说明
大部分场合的首选算 法 适用于精度较低的情 形 计算时间比ode45短 计算时间比ode45短
表6-2 刚性ODE求解命令 刚性ODE求解命令 求解器
ode23t ode15s ode23s ode23tb 采用梯形算法 多步法:Gear’ 多步法:Gear’s反向数值微分;精度中等 单步法:2 Rosebrock算法,低精度 单步法:2阶Rosebrock算法,低精度 梯形算法:低精度
MATLAB常微分方程符号解的语法是: MATLAB常微分方程符号解的语法是: dsolve(‘equation’ condition’ dsolve(‘equation’,’condition’) 其中, equation代表常微分方程式即 y′ = g ( x, y ) ,且须以Dy equation代表常微分方程式即 ,且须以Dy 代表一阶微分方程项 y′,D2y代表二阶微分 y′′ ,condition则 D2y代表二阶微分 condition则 为初始条件。 函数dsolve用来解符号常微分方程、方程组,如果没有初始条 函数dsolve用来解符号常微分方程、方程组,如果没有初始条 件,则求出通解;如果有初始条件,则求出特解。 dsolve的调用格式如下: dsolve的调用格式如下: (1) dsolve (‘equation’ ):给出微分方程的解析解,表示为t的 (‘equation’ :给出微分方程的解析解,表示为t 函数。 dsolve(‘equation’ condition’ (2) dsolve(‘equation’,’condition’):给出微分方程初值问题的解, 表示为t 表示为t的函数。 (3) dsolve (‘equation’,’v’ ):给出微分方程的解析解,表示为v (‘equation’ :给出微分方程的解析解,表示为v 的函数。 (4)dsolve(‘equation’,’condition’,’v’):给出微分方程初值问题的 dsolve(‘equation’ condition’ 解,表示为v 解,表示为v的函数。
y′′ + 2 y′ + e x = 0 通解。 例6-3 计算微分方程 通解。
解: >> dsolve('D2y+2*Dy+exp(x)','x') ans = -1/3*exp(x)+C1+C2*exp(-2*x) 1/3*exp(x)+C1+C2*exp(可知通解为
1 x y = − e + C1 + C 2 e − 2 x 3
ODE23法和 ODE23法和ODE45法与精确解的比较 法和ODE45法与精确解的比较
dy − x2 通解。 例6-1 计算微分方程 + 3 xy = xe 通解。 dx
解:>> dsolve('Dy+3*x*y=x*exp(解:>> dsolve('Dy+3*x*y=x*exp(-x^2)') ans = 1/3*exp(-3*x*t-x*(x-3*t))+exp(1/3*exp(-3*x*t-x*(x-3*t))+exp(-3*x*t)*C1 注:由于系统默认的自变量是t,显然系统把x 注:由于系统默认的自变量是t,显然系统把x当作 常数,把y当作t 常数,把y当作t的函数求解。 输入命令: >>dsolve('Dy+3*x*y=x*exp(>>dsolve('Dy+3*x*y=x*exp(-x^2)','x') ans = exp(-x^2)+exp(exp(-x^2)+exp(-3/2*x^2)*C1 可知通解为 3 − x2 2 y = e − x + C1e 2 , 其中C1为常数
6.1.2 求解器 在求常微分方程数值解方面,MATLAB具有丰富的函数,将 在求常微分方程数值解方面,MATLAB具有丰富的函数,将 其统称为solver,其一般格式为 其统称为solver,其一般格式为 [T,Y]= [T,Y]=solver(odefun,tspan,y0) 该函数表示在区间tspan=[t ,用初始条件y0求解显式常微分 该函数表示在区间tspan=[t0,tf],用初始条件y0求解显式常微分 方程 y′ = f (t , y ) 。 odefun为显式常微分方程 odefun为显式常微分方程 y′ = f (t , y ) 中的 f (t , y ) ,tspan为求 tspan为求 解区间, 要获得问题在其他指定点t0 ,t1,t2,…,则令 要获得问题在其他指定点t tspan = t0 ,t1,t2,…, tf (要求ti单调) , y0 为初始条件。 要求t 单调) solver为命令ode45、ode23、ode113、ode15s、ode23s、 ode23t、 solver为命令ode45、ode23、ode113、ode15s、ode23s、 ode23t、 ode23tb之一,其中ode45、 ode23、ode113属于非刚性ODE类 ode23tb之一,其中ode45、 ode23、ode113属于非刚性ODE类 型,这些命令的特点如表6 型,这些命令的特点如表6-1所示 ; ode15s、ode23s、 ode23t、 ode15s、ode23s、 ode23t、 ode23tb属于非刚性ODE类型,这些命令的特点如表6 ode23tb属于非刚性ODE类型,这些命令的特点如表6-2所示。
例6-4 分别用二三阶龙格-库塔法和四五阶龙格分别用二三阶龙格-库塔法和四五阶龙格库塔法解常微分方程的初值问题(取步长h=0.1 ): 库塔法解常微分方程的初值问题(取步长h=0.1 ):
y′ = − y − xy 2 (0 ≤ x ≤ 1) y (0) = 1
解:可用dsolve求方程的解析解。 :可用dsolve求方程的解析解。 >>dsolve('Dy+y+x*y^2','y(0)=1','x') ans = -1/(x+1-2*exp(x)) 1/(x+1输入如下命令求得精确解: >> x=[0:0.1:1]; >>y=-1./(x+1>>y=-1./(x+1-2.*exp(x)) 输出结果为 y=
功能
说明
适用刚性情形 若ode45失效时,可尝 ode45失效时,可尝 试使用 当精度较低时,计算 时间比ode15s短 时间比ode15s短 当精度较低时,计算 时间比ode15s短 时间比ode15s短
函数ode45与ode23是常用的求解方法,函数ode45的使用与ode23 函数ode45与ode23是常用的求解方法,函数ode45的使用与ode23 完全一样。两者的差别在于必须与所用的内部算法相关。两个 函数都运用了基本的龙格-库塔(Runge-Kutta)数值积分法的变形。 函数都运用了基本的龙格-库塔(Runge-Kutta)数值积分法的变形。 ode23运用一个组合的2/3阶龙格-库塔-芬尔格(Runge-Kuttaode23运用一个组合的2/3阶龙格-库塔-芬尔格(Runge-KuttaFehlerg)算法,而ode45运用组合的4/5阶龙格-库塔Fehlerg)算法,而ode45运用组合的4/5阶龙格-库塔-芬尔格算法。 一般地,可取较多的时间步。所以,要保持与ode23相同误差时, 一般地,可取较多的时间步。所以,要保持与ode23相同误差时, 在t0 和tf之间可取较少的时间步。然而,在同一每时间内, ode23每时间至少调用3次,而ode45每时间至少调用6 ode23每时间至少调用3次,而ode45每时间至少调用6次。 正如使用高阶多项式内插常常得不到最好的结果一样, ode45也 ode45也 不总是比ode23好。如果产生的结果,对作图间隔太大,则必须 不总是比ode23好。如果产生的结果,对作图间隔太大,则必须 在更细的时间区间内,对数据进行内插,比如用函数interpl。这 在更细的时间区间内,对数据进行内插,比如用函数interpl。这 个附加时间点使ode23更有效。作为一条普遍规则,在所计算的 个附加时间点使ode23更有效。作为一条普遍规则,在所计算的 导数中,如有重复的不连续点,为保持精度致使高阶算法减少 时间步长,这时低阶算法更有效。
相关文档
最新文档