数值分析9-3 龙格-库塔方法
龙格-库塔方法基本原理3
2020/4/7
15
令 y(xi1) yi1 对应项的系数相等,得到
c1 c2 1 ,
a2c2
1 2
,
b21c2
1 2
这里有 4 个未知 数,3 个方程。
存在无穷多个解。所有满足上式的格式统称为2阶 龙格 - 库塔格式。
2020/4/7
称为P阶龙格-库塔方法。
其中ai,bij,ci为待定参数,要求上式yi+1在点(xi,yi)处作 Tailor展开,通过相同项的系数确定参数。
2020/4/7
9
Runge-Kutta方法的推导思想
对于常微分方程的初值问题
y f (x, y) a x b
y(a)
y0
的解y=y(x),在区间[xi, xi+1]上使用微分中值定理,有
hf (xi 2
,
yi
1 2
K1 )
K3 hf (xi h, yi K1 2K 2 )
2020/4/7
22
四阶(经典)龙格—库塔法
如果需要再提高精度,用类似上述的处理 方法,只需在区间[xi,xi+1]上用四个点处的斜 率加权平均作为平均斜率K*的近似值,构成一 系列四阶龙格—库塔公式。具有四阶精度,即 局部截断误差是O(h5)。
f x(xi , yi ) f (xi , yi ) f y (xi , yi ) O(h3 )
类似地,若取前P+1项作为y(xi+1)的近似值,便得到
yi1
yi
hyi
h2 2!
yi
hP P!
yi(P)
P阶泰勒方法
其中 yi f , yi f (xi , yi )x f x ff y
龙格-库塔方法(Runge-Kutta)
龙格-库塔⽅法(Runge-Kutta)龙格-库塔⽅法(Runge-Kutta)3.2 Runge-Kutta法3.2.1 显式Runge-Kutta法的⼀般形式上节已给出与初值问题(1.2.1)等价的积分形式(3.2.1)只要对右端积分⽤不同的数值求积公式近似就可得到不同的求解初值问题(1.2.1)的数值⽅法,若⽤显式单步法(3.2.2)当,即数值求积⽤左矩形公式,它就是Euler法(3.1.2),⽅法只有⼀阶精度,若取(3.2.3)就是改进Euler法,这时数值求积公式是梯形公式的⼀种近似,计算时要⽤⼆个右端函数f的值,但⽅法是⼆阶精度的.若要得到更⾼阶的公式,则求积分时必须⽤更多的f值,根据数值积分公式,可将(3.2.1)右端积分表⽰为注意,右端f中还不能直接得到,需要像改进Euler法(3.1.11)⼀样,⽤前⾯已算得的f值表⽰为(3.2.3),⼀般情况可将(3.2.2)的表⽰为(3.2.4)其中这⾥均为待定常数,公式(3.2.2),(3.2.4)称为r级的显式Runge-Kutta法,简称R-K⽅法.它每步计算r个f值(即),⽽k由前⾯(i-1)个已算出的表⽰,故公式是显式的.例i如当r=2时,公式可表⽰为(3.2.5) 其中.改进Euler 法(3.1.11)就是⼀个⼆级显式R-K ⽅法.参数取不同的值,可得到不同公式.3.2.2 ⼆、三级显式R-K ⽅法对r=2的显式R-K ⽅法(3.2.5),要求选择参数,使公式的精度阶p 尽量⾼,由局部截断误差定义11122211()()[(,())(,)]n n n n n n n T y x y x h c f x y x c f x a h y b hk ++=--+++ (3.2.6) 令,对(3.2.6)式在处按Taylor 公式展开,由于将上述结果代⼊(3.2.6)得要使公式(3.2.5)具有的阶p=2,即,必须(3.2.7)即由此三式求的解不唯⼀.因r=2,由(3.2.5)式可知,于是有解(3.2.8)它表明使(3.2.5)具有⼆阶的⽅法很多,只要都可得到⼆阶精度R-K⽅法.若取,则,则得改进Euler法(3.1.11),若取,则得,此时(3.2.5)为(3.2.9)其中称为中点公式.改进的Euler法(3.1.11)及中点公式(3.2.9)是两个常⽤的⼆级R-K⽅法,注意⼆级R-K⽅法只能达到⼆阶,⽽不可能达到三阶.因为r=2只有4个参数,要达到p=3则在(3.2.6)的展开式中要增加3项,即增加三个⽅程,加上(3.2.7)的三个⽅程,共计六个⽅程求4个待定参数,验证得出是⽆解的.当然r=2,p=2的R-K⽅法(3.2.5)当取其他数时,也可得到其他公式,但系数较复杂,⼀般不再给出.对r=3的情形,要计算三个k值,即其中将按⼆元函数在处按Taylor公式展开,然后代⼊局部截断误差表达式,可得可得三阶⽅法,其系数共有8个,所应满⾜的⽅程为这是8个未知数6个⽅程的⽅程组,解也是不唯⼀的,通常.⼀种常见的三级三阶R-K⽅法是下⾯的三级Kutta⽅法:(3.2.11)附:R-K 的三级Kutta ⽅法程序如下function y = DELGKT3_kuta(f, h,a,b,y0,varvec) format long; N = (b-a)/h;y = zeros(N+1,1); y(1) = y0; x = a:h:b;var = findsym(f); for i=2:N+1K1 = Funval(f,varvec,[x(i-1) y(i-1)]);K2 = Funval(f,varvec,[x(i-1)+h/2 y(i-1)+K1*h/2]); K3 = Funval(f,varvec,[x(i-1)+h y(i-1)-h*K1+K2*2*h]);y(i) = y(i-1)+h*(K1+4*K2+K3)/6; %满⾜c1+c2+c3=1,(1/6 4/6 1/6)endformat short; 3.2.3 四阶R-K ⽅法及步长的⾃动选择利⽤⼆元函数Taylor 展开式可以确定(3.2.4)中r=4,p=4的R-K ⽅法,其迭代公式为111223344()n n y y h c k c k c k c k +=++++其中1(,)n n k f x y =,2221(,(,))n n n n k f x a h y b hf x y =++,⽽33311322(,)n n k f x a h y b hk b hk =+++ 44411422433(,)n n k f x a h y b hk b hk b hk =++++共计13个参数待定,Taylor 展开分析局部截断误差,使得精度达到四阶,即误差为5()O h 。
龙格库塔算法
龙格库塔算法龙格库塔算法(Runge-Kutta method)是一种常用的数值解微分方程的方法,其基本原理是通过逐步逼近的方式,根据初始条件和微分方程的表达式,计算出方程的近似解。
该方法具有较高的精度和稳定性,在科学计算、物理模拟、工程建模等领域得到广泛应用。
龙格库塔算法的核心思想是将微分方程的解按照一定的步长进行离散化,从而将连续的求解问题转化为离散的迭代过程。
具体来说,龙格库塔算法通过计算函数在一定步长内的平均斜率,来估计下一个点的函数值。
这个平均斜率是通过多次计算函数在不同点上的导数得到的,从而提高了计算的精度。
龙格库塔算法的一般形式可以表示为:k1 = f(tn, yn)k2 = f(tn + h/2, yn + h/2 * k1)k3 = f(tn + h/2, yn + h/2 * k2)k4 = f(tn + h, yn + h * k3)yn+1 = yn + h/6 * (k1 + 2k2 + 2k3 + k4)其中,tn是当前时间点,yn是当前函数值,h是步长,f是微分方程的表达式。
通过多次迭代,可以逐渐逼近微分方程的解。
龙格库塔算法的优点在于其精确度较高,可以通过调整步长来控制计算的精度和效率。
此外,该算法具有较好的数值稳定性,可以有效处理非线性、刚性或高阶微分方程等复杂问题。
因此,在科学和工程计算中,龙格库塔算法被广泛应用于各种数值模拟和求解问题。
需要注意的是,龙格库塔算法并非万能的,对于一些特殊的问题,可能存在数值不稳定性或计算精度不够的情况。
此外,算法的步长选择也需要根据具体问题进行调整,过小的步长会增加计算量,而过大的步长可能导致精度下降。
因此,在使用龙格库塔算法时,需要根据具体问题的特点和要求来选择合适的步长和算法参数,以获得满意的计算结果。
总结起来,龙格库塔算法是一种常用的数值解微分方程的方法,具有较高的精度和稳定性。
通过离散化和迭代的方式,可以逐步逼近微分方程的解。
龙格库塔法介绍
yn
hf
(xn, yn ))],
(x, y,h) 1[ f (x, y) f (x h, y hf (x, y))],
2
|
( x,
y1,
h)
(x,
y2 ,
h)
|
[L
2
L 2
(1
hL)]
|
y1
y2
|,
L
L(1
h0L),h 2
h0.
类似地,不难验证其他龙格 库塔方法的收敛性.
这里c1,c2,c3,2,3, 21, 31, 32均为待定参数.
Tn1 y(xn1) yn1 O(h4 )
(3.11)
c1 c2 c3 1
2
21
3 31 32
c22
c33
1 2
cc232223c2332
将步长折半,从xn用两步求xn1处的近似值,则有
y(xn1)
h
yn21
2c
h 2
5
.
从而
h
y ( xn 1) y ( xn 1)
yn21 ynh1
1, 16
得到事后估计式:
y ( xn 1)
h
yn21
1 15
(
h
yn21
ynh1).
通过检查步长折半前后计算结果的偏差,
y(x) (x, y(x),0) 0 p 1 单步法(4.1)收敛. 定义4 若单步法(4.1)增量函数(x, y,h)是否满足
龙格库塔法
龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法,用于数值求解微分方程。
由于此算法精度高,采取措施对误差进行抑制,所以其实现原理也较复杂。
该算法是构建在数学支持的基础之上的。
对于一阶精度的拉格朗日中值定理有:
对于微分方程:y'=f(x,y)
y(i+1)=y(i)+h*K1
K1=f(xi,yi)
当用点xi处的斜率近似值K1与右端点xi+1处的斜率K2的算术平均值作为平均斜率K*的近似值,那么就会得到二阶精度的改进拉格朗日中值定理:
y(i+1)=y(i)+[h*( K1+ K2)/2]
K1=f(xi,yi)
K2=f(x(i)+h,y(i)+h*K1)
依次类推,如果在区间[xi,xi+1]内多预估几个点上的斜率值K1、K2、……Km,并用他们的加权平均数作为平均斜率K*的近似值,显然能构造出具有很高精度的高阶计算公式。
经数学推导、求解,可以得出四阶龙格-库塔公式,也就是在工程中应用广泛的经典龙格-库塔算法:
y(i+1)=y(i)+h*( K1+ 2*K2 +2*K3+ K4)/6
K1=f(x(i),y(i))
K2=f(x(i)+h/2,y(i)+h*K1/2)
K3=f(x(i)+h/2,y(i)+h*K2/2)
K4=f(x(i)+h,y(i)+h*K3)
通常所说的龙格-库塔法是指四阶而言的,我们可以仿二阶、三阶的情形推导出常用的标准四阶龙格-库塔法公式。
数值分析重点公式
数值分析重点公式数值分析是数学和计算机科学的交叉学科,研究如何在实际问题中获取精确或近似数值解的方法。
在数值分析中,有许多重要的公式和方法用于解决各种数学和科学问题。
下面是一些数值分析中的重点公式:1.泰勒展开公式:泰勒展开公式可以将一个函数表示为无限级数。
对于一个无穷可微的函数f(x),其泰勒展开可以表示为:f(x)=f(a)+f'(a)(x-a)/1!+f''(a)(x-a)²/2!+f'''(a)(x-a)³/3!+...2. 拉格朗日插值公式:拉格朗日插值公式是一种用于通过已知数据点构造一个多项式函数的方法。
对于n个已知点(xi, yi),拉格朗日插值多项式可以表示为:L(x) = Σ yi * l(i)(x)其中l(i)(x)是拉格朗日基函数,定义为:l(i)(x) = Π (x-xj)/(xi-xj) for j ≠ i3.数值微分公式:数值微分公式用于计算函数的导数。
常用的数值微分公式包括前向差分、后向差分和中心差分。
前向差分公式如下:fd'(x) = (f(x+h) - f(x))/h后向差分公式如下:bd'(x) = (f(x) - f(x-h))/h中心差分公式如下:cd'(x) = (f(x+h) - f(x-h))/(2h)其中h是一个小的非零常数,用于控制近似的精度。
4.数值积分公式:数值积分公式用于计算函数的定积分。
常用的数值积分方法包括矩形法、梯形法和辛普森法则。
梯形法则可以表示为:T(f) = h/2 * [f(x0) + 2Σf(xi) + f(xn)]其中h是区间宽度,n是等分的子区间数,xi是区间的分点。
5.龙格-库塔法:龙格-库塔法是解常微分方程组的一种常用方法。
常见的龙格-库塔法有四阶和五阶,其中四阶龙格-库塔法可表示为:yn+1 = yn + (k1 + 2k2 + 2k3 + k4)/6其中:k1 = hf(xn, yn)k2 = hf(xn + h/2, yn + k1/2)k3 = hf(xn + h/2, yn + k2/2)k4 = hf(xn + h, yn + k3)以上只是数值分析中的一些重点公式,这些公式是解决各种数学和科学问题的基础。
龙格库塔法
c1
c2
1
0,
1 2
c2
0
即常数c1, c2 , 满足条件
c1 c2 1
c2
1 2
方程组有三个未知数,但只有两个方程,因此可得到
局部截断误差为O(h3 )的计算公式.
如果取c1
c2
1 ,
2
1,递推公式为
y0
k1 f (ti , yi )
k2 f (ti h, yi hk1)
yi
代入上式, 得
yi1 yi h(c1 f c2 f ) c2h( ft ffy ) O(h2 )
在局部截断误差的前提假设yi y(ti )下,得
y(ti1)
yi1
h(c1
c2
1)
f
h2(1 2
c2 )( ft
ffy ) O(h3)
要使局部截断误差y(ti1) yi1 O(h3 ),当且仅当
§9-3 龙格—库塔法
一、高阶泰勒法
假设初值问题
dy f (t, y) a t b dt
(1)
y(a)
的解y(t)及f (t, y)足够光滑.
将y(ti1)在ti处作n阶泰勒展开 , 得
y(ti1)
y(ti )
y(ti )h
y(ti ) h2 2!
y(n) (ti ) hn n!
y(n1) (i ) hn1
f
(ti
1 2
h,
yi
1 2 hk1)
(10)
yi1 yi hk2 )
公式(8)、(9)、(10)三式是三种常见的二阶龙格—库塔公式
局部截断误差为 O(h3).
三、三、四阶龙格—库塔法
三阶龙格—库塔法
龙格-库塔(Runge-Kutta)方法
( )
dy dy y′ = = f, y′′ = f x + f y = f x + ffy = F dx dx F F dy F F y′′′ = + = +f x y dx x y F = f xx + f x f y + ffyx = f xx + f x f y + ffxy x F 2 2 f = f(fxy + f y f y + ffyy ) = ffxy + ffy + f f yy y
y ( x) = e
但
x2
∫
x
0
e dt
t2
∫
x
0
e dt 难以求积
t2
ODE数值解的基本思想和方法特点 数值解的基本思想和方法特点
1. 离散化 级数、 用Taylor级数、数值积分和差商逼近导数, 级数 数值积分和差商逼近导数, 将 ODE转化为离散的代数方程 称差分方程 。 转化为离散的代数方程(称差分方程 转化为离散的代数方程 称差分方程)。
(ha2 ) + (ha3 ) +
f 2 2! x
2 2 2
(ha f ) +
2
2
K3 f + ha3 f x + h (a3 b32 ) f + b32 K2 f y 2! 2! + h2a3 (a3 b32 ) f + b32 K2 f xy f xx + h (a3 b32 ) f + b32 K2
2
Euler法 后退 法 ym+1 = ym + hK2 + O(h2 ) K2 = f ( xm + h, ym+1 )
第3讲(龙格-库塔方法)
易见,它与二阶泰勒级数方法仅相差 O( h3 )!
这一分析给我们提供了一个重要信息,那就是 我们所遇到的泰勒级数方法中求导数的困难是可以 克服的,改进的欧拉方法就没有用到导数,而是借 助于函数在某些点处的值 (复合函数的思想)。
又 y( x ) df ( x , y( x )) f x f y y f x f y f dx
故二阶泰勒级数方法为 h2 yi 1 yi h f ( xi , yi ) ( f x ( xi , yi ) f ( xi , yi ) f y ( xi , yi )) 2! 更高阶方法更复杂,主要是求导复杂!
yi 1
h2 hk ( k ) yi h y y yi i i 2! k!
这样的数值方法称为k 阶泰勒级数方法。
yi 1
h2 hk ( k ) yi h y y yi i i 2! k!
泰勒级数方法也是单步法,且其局部截断误差为
h2 hk ( k ) LTE y( xi 1 ) y( xi ) hy( xi ) y( xi ) y ( x i ) 2! k!
第二节 龙格-库塔方法
(Runge-Kutta)
根据局部截断误差与整体误差的关系可知, 局部截断误差的阶是衡量一个方法优劣的重要依据。 考虑用提高局部截断误差的阶来提高数值方法的 精度。 泰勒级数法 龙格―库塔方法
一、泰勒级数方法
d y f ( x, y ), x I 如果初值问题 d x 的精确解 y(x) 在 I y( x ) y 0 0
数值分析9-3(龙格-库塔方法)
总结词
除了Python和MATLAB,还有许多其他编 程语言可以用于实现龙格-库塔方法。
详细描述
例如C、Java和R等编程语言也提供了相应 的数值计算库或框架,可以实现龙格-库塔 方法。使用这些语言实现龙格-库塔方法需 要一定的编程基础和对相应语言的数值计算 库的了解。
龙格-库塔方法可以用于求解偏微分方程的数值解,通过将偏微分方程转化为常微分方程组,利用龙格 -库塔方法进行迭代求解,能够得到较为精确的结果。
积分方程的数值解
积分方程是描述函数与积分之间的关 系的数学模型,常见于物理、工程等 领域。
VS
龙格-库塔方法也可以用于求解积分 方程的数值解,通过将积分方程转化 为常微分方程组,利用龙格-库塔方 法进行迭代求解,能够得到较为精确 的结果。
重要性及应用领域
龙格-库塔方法是数值分析中非常重要的内容, 它为解决常微分方程提供了一种有效的数值方 法。
在科学、工程和经济学等领域中,许多问题都 可以转化为求解常微分方程的问题,因此龙格库塔方法具有广泛的应用价值。
例如,在物理学、化学、生物学、金融学等领 域中,龙格-库塔方法被广泛应用于模拟和预测 各种动态系统的行为。
数值分析9-3:龙格-库塔方法
目录
• 引言 • 龙格-库塔方法概述 • 龙格-库塔方法在数值分析中的应用 • 龙格-库塔方法的实现与编程 • 龙格-库塔方法的改进与优化 • 结论与展望
01 引言
主题简介
龙格-库塔方法是一种用于求解常微 分方程的数值方法。
它通过构造一个离散化的时间序列来 逼近微分方程的解,并利用已知的离 散点来计算新的离散点,逐步逼近微 分方程的真实解。
02 龙格-库塔方法概述
定义与原理
龙格库塔法解轨道参数
龙格库塔法解轨道参数引言龙格库塔法(Runge-Kutta method)是一种常用的数值计算方法,用于求解常微分方程的数值解。
在天体力学中,我们经常需要通过数值方法来计算天体的轨道参数,如轨道椭圆的长短轴、离心率、倾角等。
本文将介绍龙格库塔法在解轨道参数中的应用,并详细探讨该方法的原理和实现过程。
基本原理龙格库塔法是一种迭代求解的方法,在每个时间步长内利用当前的状态来估计下一个状态。
具体而言,龙格库塔法将微分方程的求解问题转化为一个迭代的求解问题,通过逐步迭代来逼近精确解。
在解轨道参数的问题中,我们通常需要根据已知的初始条件以及天体的质量和力学模型来求解天体的轨道参数。
常用的力学模型有开普勒模型和牛顿模型。
龙格库塔法可以根据力学模型的不同进行相应的求解。
开普勒模型下的轨道参数求解步骤一:确定初始条件在使用龙格库塔法求解轨道参数之前,我们需要确定一些初始条件。
这些初始条件包括天体的质量、位置和速度。
步骤二:选择时间步长在求解过程中,我们需要选择一个合适的时间步长。
时间步长越小,计算的精度会越高,但计算的时间会增加。
步骤三:迭代求解利用龙格库塔法进行迭代求解的具体步骤如下:1.根据当前时刻的位置和速度,计算天体在该时刻的加速度。
2.根据当前时刻的位置、速度和加速度,计算下一个时刻的位置和速度。
3.更新当前时刻的位置和速度为新的位置和速度。
4.重复上述步骤,直到达到指定的终止条件。
步骤四:计算轨道参数通过迭代求解,我们可以得到天体在不同时刻的位置和速度。
根据这些位置和速度,我们可以计算出轨道参数,如离心率、倾角、长短轴等。
常用的轨道参数计算公式如下:1.离心率:e=√1+2El2μ(GM⊕)2)2.倾角:i=arccos(ℎzℎ3.长轴:a=−μT22E4.短轴:b=a√1−e2其中,E表示能量,l表示轨道角动量,μ表示标准引力参数,G表示引力常数,M⊕表示地球的质量,ℎ和ℎz分别表示轨道角动量和轨道角动量在z轴上的分量。
龙格-库塔方法基本原理3
将 K 2 hy( xi a2h) hf ( xi a2h, yi b21K1) 在x=xi处进行Taylor展开:
2018/11/30 14
b21K1 f y O(h2 ) K2 h f ( xi , yi ) a2hf x
b21hff y O(h3 ) h f ( xi , yi ) a2hf x
的解y=y(x),在区间[xi, xi+1]上使用微分中值定理,有
y( xi 1 ) y( xi ) y ( i )( xi 1 xi )
其中 i ( xi , xi 1 )
即
2018/11/30
y( xi 1 ) y( xi ) hy( i )
10
引入记号
2018/11/30 6
同理,改进Euler公式可改写成
1 1 yi 1 yi 2 K1 2 K 2 K1 hf ( xi , yi ) K hf ( x h, y K ) i i 1 2
局部截断误差为O(h3)
上述两组公式在形式上共同点:都是用f(x,y)在某 些点上值的线性组合得出y(xi+1)的近似值yi+1, 且增 加计算的次数f(x,y)的次数,可提高截断误差的阶。如 欧拉法:每步计算一次f(x,y)的值,为一阶方法。改进 欧拉法需计算两次f(x,y)的值,为二阶方法。
2018/11/30 5
Runge-Kutta 方法是一种高精度的单步法,简称R-K法
龙格-库塔(R-K)法的基本思想
Euler公式可改写成
yi 1 yi K K hf ( xi , yi )
则 yi+1 的表达式与 y(xi+1) 的 Taylor 展开式的前两项 完全相同,即局部截断误差为O(h2)。
数值分析9-3 龙格-库塔方法
最常用为四级4阶经典龙格-库塔法 /* Classical Runge-Kutta Method */ :
y i 1 y i h ( K1 2K 2 2K 3 K 4 ) 6 K1 K2 K3 K4 f ( xi , yi )
h f ( xi h , y K1 ) i 2 2 h f ( xi h , y K2 ) i 2 2
一、再看Taylor方法
h y ( x h) y ( x) hy' ( x) y" ( x) 2 h3 h 4 ( 4) y ( x) y ( x) 6 24 一般可取公式为如下形式
2
y n 1
h h ( p) y n hy' n y"n yn 2! p!
yi 1 K1 K2 yi h [1 K 1 2 K 2 ] f ( x i , yi ) f ( xi ph, yi phK 1 )
d f ( x, y) dx 首先希望能确定系数 1、2、p,使得到的算法格式有 2阶 dy 精度,即在 yi y( xi ) 的前提假设下,使得 f x ( x, y) f y ( x, y) dx Ri y( xi 1 ) yi 1 O( h3 ) f x ( x, y) f y ( x, y) f ( x, y) y( x )
考察改进的欧拉法,可以将其改写为: 斜率 一定取K1 K2 的平均值吗?
y i 1 K1 K2
1 1 yi h K 1 K 2 2 2 f ( xi , yi ) f ( x i h, y i hK 1 )
步长一定是一个h 吗?
将改进欧拉法推广为:
龙格库塔方法
• 可以通过检查步长折半前后两次计
算结果的偏差
=
(h)
y2 n1
y(h) n1
变步长方
来判断所选取的步长是否合法适
(1)对于给定的精度,如果 ,则反复将步长折半 进行计算直至 为止,这时取折半以后的“ 新值” 作为结果;
(2)如果 ,则反复将步长加倍,直至 为止, 这时取步长加倍前的“ 老值” 作为结果
四阶RungeKutta方法
这样,下一个值(yn+1)由现在的值(yn)加上时间间隔 (h)和一个估算的斜率的乘积 决定。该斜率是以下斜率的加权平均:
k1是时间段开始时的斜率; k2是时间段中点的斜率,通过欧拉法采用斜率 k1 来 决定 y在点 tn + h/2的值; k3也是中点的斜率,但是这次采用斜率 k2决定 y值; k4是时间段终点的斜率,其 y值用 k3 决定。 当四个斜率取平均时,中点的斜率有更大的权值:
y=y0;z=zeros(c,6); %z生成c行,6列的零矩阵存放结 果;
不断迭代运算: for x=a:h:b
if i1<=c k1=feval(yy,x,y); k2=feval(yy,x+h/2,y+(h*k1)/2); k3=feval(yy,x+h/2,y+(h*k2)/2); k4=feval(yy,x+h,y+h*k3); y=y+(h/6)*(k1+2*k2+2*k3+k4);
五、变步长Runge-Kutta方
法• 从每一步看,步长越小,截断误差
越小;但随着步长的缩小,在一定 求解范围内所要完成的步数就会增 加,步数的增加不但引起计算量的 增大,而且可能导致舍入误差的严 重积累,因此需要选择步长
龙格库塔积分算法
龙格库塔积分算法龙格库塔法龙格库塔法是常用于模拟常微分方程的解的重要的一类隐式或显式迭代法。
这些技术由数学家C. Runge和M.W. Kutta于1900年左右发明。
由于此算法精度高,采取措施对误差进行抑制,所以其实现原理也较复杂。
龙格库塔法是一种在工程上应用广泛的高精度单步算法,可以应用在物理、工程、控制、动力学中,如模糊控制、弹道分析以及分析光纤特性等,在系统仿真中得到广泛应用。
龙格库塔法源自于相应的泰勒级数方法,在每一插值节点用泰勒级数展开,其截断误差阶数也是,根据可省略更高阶的导数计算, 这种方法可构造任意阶数的龙格库塔法。
其中4 阶龙格库塔法是最常用的一种方法。
因为它相当精确、稳定、容易编程。
在计算中一般不必使用高阶方法, 因为附加的计算误差可由增加精度来弥补。
如果需要较高的精度, 可采取减小步长的方法即可。
4 阶龙格库塔法的精度类似4 阶泰勒级数法的精度。
1、初值问题对于一阶常微分方程的初值问题根据常微分方程的理论可知,此初值问题的解在区间[a,b]上存在,且唯一。
2、离散化取步长h=(b-a)/n,将区间[a , b]分成n个子区间:a=<=b在其中任意两点的曲线段上,根据积分中值定理,一段光滑曲线上至少有一点,它的斜率与整段曲线的平均斜率相同,得=y’() (0<<1)其中,=可以将上式改写成y()=y()+h*K (2.1)其中K为平均斜率,K=f()公式(2.1)表明,如果能够确定平均斜率K,就可以根据(2.1)式得到y()的值。
欧拉法和龙格库塔法就是用不同方法确定不同精度的平均斜率K,从而求得y()的近似值。
3、Euler法欧拉法虽然精度低,但它是最简单的一种显式单步法,也是龙格库塔法的基础。
首先,令、为y() 及y()的近似值,并且令平均斜率K=f(),即以点的斜率作为平均斜率K,便得到欧拉公式=+h* f() (3.1)4、改进的欧拉法此种方法是取、两点的斜率的平均值作为平均斜率K,即K= ,其中、均为y()以及y()的近似值,就得到改进后的欧拉公式(4.1)其中、分别为、两点的斜率值,即= ,=在上面的(4.1)式中,k2是未知的,采用一种叫预报法的方法来求解。
数值计算中的龙格库塔算法
数值计算中的龙格库塔算法龙格库塔算法,又称龙格-库塔算法,是一种数值计算方法,主要用于求解微分方程。
它的好处是通过迭代得到更加精确的数值解,对于很多科学和工程问题,如天体力学、化学反应动力学、电路分析等,都有广泛的应用。
一、初识龙格库塔算法最早提出龙格库塔算法的是瑞士数学家卡尔·龙格和德国数学家马丁·库塔,他们在20世纪初期分别提出了一种求解常微分方程组的方法,后来又被合并为一种更为完善的算法,即现在我们所说的龙格库塔算法。
它的基本思想是将微分方程分解成一系列递推的步骤,通过不断迭代,逐渐逼近准确的解。
龙格库塔算法的核心是求出微分方程在某个时刻的斜率。
一般而言,我们可以使用欧拉法或者梯形法来求解,但这些方法往往会出现舍入误差,导致数值解偏离实际解。
相比之下,龙格库塔算法则将微分方程的初始值向前推进一个尽可能小的步长,通过不断缩小步长的大小进行迭代,在保证精度的同时大大提高了计算效率。
在实际应用中,我们通常会使用四阶龙格库塔算法(RK4)来求解微分方程。
具体做法是先求出微分方程在 $t$ 时刻的斜率$k_1$,然后将$t$ 向前推进一半的步长,求出此时的斜率$k_2$,再用 $k_2$ 推进一半的步长,求出此时的斜率 $k_3$,最后以$k_3$ 推进一个步长,求出微分方程在 $t+h$ 时刻的斜率 $k_4$。
最终的数值解为:$$y_{n+1} = y_n + \frac{1}{6}(k_1+2k_2+2k_3+k_4)h$$其中 $y_{n+1}$ 表示下一个时刻的函数值,$y_n$ 表示当前时刻的函数值,$h$ 表示步长。
这个公式看起来比较复杂,但实际上只是对斜率的加权平均。
通过不断迭代,我们就可以得到越来越精确的解。
二、优缺点及应用与其他数值计算方法相比,龙格库塔算法具有以下优点:1. 高精度:通过四阶跑格库塔公式,可达到高精度计算。
2. 稳定可靠:在每一步均会进行收敛性检验,确保计算结果准确无误。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
再看Taylor方法 一、再看 方法
h y(x + h) = y(x) + hy' (x) + y"(x) 2 h3 h4 (4) + y′′′(x) + y (x) 6 24 +⋯ 一般可取公式为如下形式
2
h h ( p) yn+1 = yn + hy'n + y"n +⋯+ yn 2! p!
2
d f ( x, y) dx 首先希望能确定系数 λ1、λ2、p,使得到的算法格式有 阶 ,使得到的算法格式有2阶 精度, 的前提假设下, ( x, y) 精度,即在 yi = y( x i ) 的前提假设下,使得 + f y ( x, y) dy = fx dx Ri = y ( x i +1 ) − y i +1 = O ( h 3 ) = f x ( x, y) + f y ( x, y) f ( x, y) y′′( x) =
第九章 常微分方程数值解 §2 龙格 - 库塔法 /* Runge-Kutta Method */
一、再看 再看Taylor方法 方法 二、Runge-Kutta 方法
dy = f ( x, y) x ∈[a, b] dx y(a) = y0
复习
h2 y(x + h) = y(x) + hy' (x) + y"(x) 2 h3 h4 (4) + y′′′(x) + y (x) +⋯ 6 24
{
}
Step 3: 将 yi+1 与 y( xi+1 ) 在 xi 点的泰勒展开作比较 点的泰勒 泰勒展开作比较
y i + 1 = y i + ( λ 1 + λ 2 ) h y ′( x i ) + λ 2 ph 2 y ′′( x i ) + O ( h 3 )
h2 y ( x i + 1 ) = y ( x i ) + h y ′( x i ) + y ′′( x i ) + O ( h 3 ) 2
由于龙格-库塔法的导出基于泰勒展开, 由于龙格 库塔法的导出基于泰勒展开, 库塔法的导出基于泰勒展开 故精度主要受解函数的光滑性影响。 故精度主要受解函数的光滑性影响。对 于光滑性不太好的解,最好采用低阶算 于光滑性不太好的解,最好采用低阶算 而将步长h 取小。 开式构造公式时,希望 近似值的泰勒展开式与精确值的泰勒展式有 尽可能多的项相同, 两者关于h 尽可能多的项相同 , 即 : 两者关于 h 的展式 中的系数尽可能多的项相同 尽可能多的项相同, 中的系数尽可能多的项相同,这样局部截断 误差与h 的更高次同阶, 误差与 h 的更高次同阶 , 从而获得高精度的 近似公式。 近似公式。
= y ′ ( x i ) + ph y ′′ ( x i ) + O ( h 2 )
Step 2: 将 K2 代入第 式,得到 代入第1式
y i + 1 = y i + h λ 1 y ′( x i ) + λ 2[ y ′( x i ) + ph y ′′( x i ) + O ( h 2 )] = y i + ( λ 1 + λ 2 ) h y ′( x i ) + λ 2 ph 2 y ′′( x i ) + O ( h 3 )
yi +1 = yi + h ( K1 + 2K2 + 2K3 + K4 ) 6 K1 = f ( xi , yi ) K2 = f ( xi + h, yi + h K1 ) 2 2 K3 = f ( xi + h, yi + h K2 ) 2 2 K4 = f ( xi + h, yi + hK3 )
注: 龙格-库塔法 库塔法的运算在于计算 的值, 龙格 库塔法的运算在于计算 Ki 的值,即 的值。 计算 f 的值。Butcher 于1965年给出了计 年给出了计 算量与可达到的最高精度阶数的关系: 算量与可达到的最高精度阶数的关系:
每步须算K 每步须算 i 的 2 3 4 5 6 7 n≥8 个数 可达到的最高 4 3 4 5 6 n−2 O(h2 ) O(h ) O(h ) O(h ) O(h ) O(h ) O(h ) 精度
2
问题: 为获得更高的精度,应该如何进一步推广? 问题 为获得更高的精度,应该如何进一步推广?
yi +1 = yi + h [ λ1 K 1 + λ2 K 2 + ... + λm K m ] K 1 = f ( xi , yi ) K 2 = f ( x i + α 2 h, yi + β 21 hK 1 ) K 3 = f ( x i + α 3 h, yi + β 31 hK 1 + β 32 hK 2 ) ... ... K m = f ( x i + α m h, y + β m1 hK 1 + β m 2 hK 2 + ... + βm m −1 hK m −1 )
3 则必须有: 要求 Ri = y( xi +1 ) − yi +1 = O( h ) ,则必须有:
1 λ1 + λ 2 = 1 , λ 2 p = 2
这里有 3 个未知 个方程。 数, 2 个方程。
存在无穷多个解。所有满足上式的格式统称为 阶龙格 存在无穷多个解。所有满足上式的格式统称为2阶龙格 - 库 无穷多个解 塔格式。注意到, 塔格式。注意到,p = 1, λ 1 = λ 2 = 1 就是改进的欧拉法。 就是改进的欧拉法。
Step 1: 将 K2 在 ( xi , yi ) 点作 Taylor 展开 用二元函数泰勒展开 展开(用二元函数泰勒展开 用二元函数泰勒展开)
K 2 = f ( xi + ph, yi + phK 1 ) = f ( xi , yi ) + phf x ( xi , yi ) + phK 1 f y ( xi , yi ) + O( h2 )
y i +1 K1 K2
= = =
1 1 yi + h K 1 + K 2 2 2 f ( xi , yi ) f ( x i + h , y i + hK 1 )
步长一定是一个h 步长一定是一个 吗?
将改进欧拉法推广为: 将改进欧拉法推广为:
yi +1 K1 K2 = = = yi + h [λ1 K 1 + λ2 K 2 ] f ( x i , yi ) f ( x i + ph, yi + phK 1 )
二元函数的Taylor展开 展开 二元函数的
一元函数的Taylor展开 展开 一元函数的
f (x, y) = f (x0 , y0 ) ′ f x (x0 , y0 )( x − x0 ) + ′(x0 , y0 )( y − y0 ) + f y f ′′(x , y )( x − x )2 0 x 0 0 1 ′ ′ + + 2 f xy (x0 , y0 )( x − x0 )( y − y0 ) +⋯ 2 2 ′ + f y′(x0 , y0 )( y − y0 )
二、Runge-Kutta 方法
建立高精度的单步递推格式。 建立高精度的单步递推格式。
单步递推法的基本思想是从 点出发, 单步递推法的基本思想是从 ( xi , yi ) 点出发,以某一斜 基本思想 率沿直线达到 ( xi+1 , yi+1 ) 点。欧拉法及其各种变形所 能达到的最高精度为2阶 能达到的最高精度为 阶。 考察改进的欧拉法,可以将其改写为: 考察改进的欧拉法,可以将其改写为: 斜率 一定取K1 K2 一定取 平均值吗 的平均值吗?
其中λi ( i = 1, …, m ),αi ( i = 2, …, m ) 和 , βij ( i = 2, …, m; j = 1, …, i−1 ) 均为待定系 − 确定这些系数的步骤与前面相似。 数,确定这些系数的步骤与前面相似。
最常用为四级4阶经典龙格 库塔法 最常用为四级 阶经典龙格-库塔法 /* Classical Runge-Kutta Method */ :