计算方法龙格库塔方法
龙格库塔积分算法
龙格库塔法龙格库塔法是常用于模拟常微分方程的解的重要的一类隐式或显式迭代法。
这些技术由数学家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是未知的,采用一种叫预报法的方法来求解。
龙格-库塔方法
一、Taylor展开法
设
y′ = f ( x, y)
y( x0 ) =
y0
(1)
在[a,b]上有解 y( x),将y( xn+1 )在xn处泰勒展开
y( xn+1 )
=
y( xn ) +
hy′( xn ) +
h2 2!
y′′( xn ) +
h3 3!
y′′′( xn ) +
k4 = f ( xn + h, yn + hk1 − hk2 + hk3 )
为了分析经典R-K公式的计算量和计算精度, 将四阶经典R-K公式与一阶显式Euler公式及二阶改 进的Euler公式相比较。一般说来,公式的级数越 大,计算右端项 f 的次数越多,计算量越大。在 同样步长的情况下,Euler方法每步只计算一个函 数值,而经典方法要计算4个函数值。四阶R-K法的
0.5 0.397312
改进Euler法 h=0.05
0.095123 0.181193 0.259085 0.329563 0.393337
经典R-K法 h=0.1 0.09516250 0.18126910 0.25918158 0.32967971 0.39346906
准确解
y(xn )
0.09516258 0.18126925 0.25918178 0.32967995 0.39346934
h 2 k1 )
k3
=
f (xn
+
3 4
h,
yn
+
3 4 hk2 )
四阶龙格—库塔公式有:
古典公式:
yn+1 = k1 = f k2 = f
龙格库塔法
一、高阶泰勒法
假设初值问题
龙格—库塔法 龙格 库塔法
dy = f (t , y ) dt y (a) = α 的解y (t)及f (t , y )足够光滑.
将y (ti +1 )在ti处作n阶泰勒展开, 得
a≤t ≤b
(1)
y′′(ti ) 2 y ( n ) (ti ) n y ( n +1) (ξ i ) n +1 y (ti +1 ) = y (ti ) + y′(ti )h + h +L+ h + h n! 2! (n + 1)! 其中, ti < ξ i < ti +1.
2
i
i
1
3
i
i
2
4
i
i
3
i +1
i
6123 Nhomakorabea4
作业 教材P198 习题3
(2)
(3)
首先将y (ti +1 )在ti处展成幂级数 h2 y (ti +1 ) = y (ti ) + hy′(ti ) + y′′(ti ) + O(h 3 ) 2 将 y′(t ) = f (t , y (t )) y′′(t ) = f t′(t , y (t )) + f y (t , y (t )) f (t , y (t )) 代入上式, 得 h2 y (ti +1 ) = y (ti ) + hf + ( f t + ff y ) + O(h 3 ) (3) 2 其中f , f t , f y′分别表示相应函数在点(ti , y (ti ))处的函数值.
计算方法 常微分方程初值问题数值解法-Euler公式-龙格-库塔法
[xi , xi 1 ]上积分得,
y(xi 1 ) y(xi )
xi 1
xi
f[x, y(x)]dx
(9.4 )
改用梯形方法计算其积分项,即
xi 1
x i 1 x i [f(x i , y(x i )) f(x i 1 , y(x i 1 ))] 2
xi
f[x, y(x)]dx
0 1 n1 n
… , y(xn ) (未知) 处的函数值 y(x 0 ), y(x1 ),
, yn 的近似值 y 0 , y1 ,…
y=y(x)
a=x0 x1
x2
x3
xn=b
• 相邻两个节点的间距 h xi 1 xi 称为步长,
步长可以相等,也可以不等。
• 本章总是假定h为定数,称为定步长,这时节 点可表示为
第9章 常微分方程初值问题数值解法
§9.1 引言
包含自变量、未知函数及未知函数的导数的方程称 为微分方程。
自变量个数只有一个的微分方程称为常微分方 程。
微分方程中出现的未知函数最高阶导数的阶数 称为微分方程的阶数。 如果未知函数y及其各阶导数
y, y, … , y
(n)
都是一次的,则称其为线性的,否则称为非线性的。
• 如下是一些典型方程求解析解的基本方法 可分离变量法、 常系数齐次线性方程的解法、 常系数非齐次线性方程的解法等。
• 但能求解的常微分方程仍然是很少的,大多数
的常微分方程是不可能给出解析解。例如,一
阶微分方程
y x y
2
2
的解就不能用初等函数及其积分来表达。
• 从实际问题当中归纳出来的微分方程,通常主 要依靠数值解法来解决。 • 本章主要讨论一阶常微分方程初值问题
82第二节 龙格—库塔法
k
(1)
h h k 若令 yn1 y xn hy xn y xn y xn (2) 2! k! 则 y xn1 yn1 O hk 1
y0 k1 2 k2 hf x0 h 2, y0 k1 2
y0 k3
k4 hf x0 h, y0 k3
y0 k2 2 k3 hf x0 h 2, y0 k2 2
k
x1 x0 h y1 y0 k
数学学院 信息与计算科学系
0.1832292
0.1584376
数学学院 信息与计算科学系
接上图
0.4 0.5 0.5 0.6 0.6 1.341667 1.416026 1.412676 1.482627 1.483281 0.0745394 0.0710094 0.0708400 0.0673253
0.1416245
数学学院 信息与计算科学系
数学学院 信息与计算科学系
由表8-4可见,虽然四阶龙格-库塔方法每步要 计算四次 f 的值,但以h=0.2为步长ቤተ መጻሕፍቲ ባይዱ计算结果就
有5 位有效数字,而欧拉法与预估计-校正方法以
h=0.1为步长的计算结果才具有2 位与3 位有效数字.
如果步长 h 也取0.2,则结果的精度会更低.
即公式(2)为k 阶方法.
数学学院 信息与计算科学系
二、龙格-库塔方法(R-K方法)
R-K方法不是通过求导数的方法构造近似公式, 而是通过计算不同点上的函数值, 并对这些函数值作 线性组合, 构造近似公式, 再把近似公式与解的泰勒 展开式进行比较, 使前面的若干项相同 , 从而使近似 公式达到一定的阶数.
龙格库塔
数值分析中,龙格-库塔法(Runge-Kutta)是用于模拟常微分方程的解的重要的一类隐式或显式迭代法。
这些技术由数学家卡尔·龙格和马丁·威尔海姆·库塔于1900年左右发明。
经典四阶龙格库塔法龙格库塔法的家族中的一个成员如此常用,以至于经常被称为“RK4”或者就是“龙格库塔法”。
令初值问题表述如下。
则,对于该问题的RK4由如下方程给出:其中这样,下一个值(y n+1)由现在的值(y n)加上时间间隔(h)和一个估算的斜率的乘积决定。
该斜率是以下斜率的加权平均:∙k1是时间段开始时的斜率;∙k2是时间段中点的斜率,通过欧拉法采用斜率k1来决定y在点t n + h/2的值;∙k3也是中点的斜率,但是这次采用斜率k2决定y值;∙k4是时间段终点的斜率,其y值用k3决定。
当四个斜率取平均时,中点的斜率有更大的权值:RK4法是四阶方法,也就是说每步的误差是h5阶,而总积累误差为h4阶。
注意上述公式对于标量或者向量函数(y可以是向量)都适用。
显式龙格库塔法显示龙格-库塔法是上述RK4法的一个推广。
它由下式给出其中如果要求方法有精度p则还有相应的条件,也就是要求舍入误差为O(h p+1)时的条件。
这些可以从舍入误差本身的定义中导出。
例如,一个2阶精度的2段方法要求b1 + b2 = 1, b2c2 = 1/2, 以及b2a21 = 1/2。
在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%function dxdt=ode_Miss_ghost(t,x)%分别用x(1),x(2),x(3),x(4)代替N1,P1,N2,P2N1=x(1);P1=x(2);N2=x(3);P2=x(4);K=2;tau_c=3e-9;tan_p=6e-12;beta =5e-5;delta=0.692;eta =0.0001;fm =8e6;Ith =26e-3;Ib =1.5*Ith;Im =0.3*Ith;I1=Ib+Im*sin(2*pi*fm*t)+K*P2;I2=Ib+Im*sin(2*pi*fm*t)+K*P1;dxdt=[(I1/Ith-N1-(N1-delta)/(1-delta)*P1)/tau_e;((N1-delta)/(1-delta)*(1-eta*P1)*P1-P1+beta*N1)/tau_p;(I2/Ith-N2-(N2-delta)/(1-delta)*P2)/tau_e;((N2-delta)/(1-delta)*(1-eta*P2)*P2-P2+beta*N2)/tau_p;]; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%在Matlab下面输入:t_start=0;t_end=2e-9;y0=[1e-3;1e-4;0;0]; %初值[x,y]=ode15s('ode_Miss_ghost',[0,t_end],y0);plot(x,y);legend('N1','P1','N2','P2');xlabel('x');Mathlab定步长龙格-库塔法[345阶]、自适应步长rkf45经常看到很多朋友问定步长的龙格库塔法设置问题,下面吧定步长三阶、四阶、五阶龙格库塔程序贴出来,有需要的可以看看ODE3 三阶龙格-库塔法CODE:function Y = ode3(odefun,tspan,y0,varargin)%ODE3 Solve differential equations with a non-adaptive method of order 3.% Y = ODE3(ODEFUN,TSPAN,Y0) with TSPAN = [T1, T2, T3, ... TN] integrates% the system of differential equations y' = f(t,y) by stepping from T0 to% T1 to TN. Function ODEFUN(T,Y) must return f(t,y) in a column vector.% The vector Y0 is the initial conditions at T0. Each row in the solution% array Y corresponds to a time specified in TSPAN.%% Y = ODE3(ODEFUN,TSPAN,Y0,P1,P2...) passes the additional parameters% P1,P2... to the derivative function as ODEFUN(T,Y,P1,P2...).%% This is a non-adaptive solver. The step sequence is determined by TSPAN% but the derivative function ODEFUN is evaluated multiple times per step.% The solver implements the Bogacki-Shampine Runge-Kutta method of order 3.%% Example% tspan = 0:0.1:20;% y = ode3(@vdp1,tspan,[2 0]);% plot(tspan,y(:,1));% solves the system y' = vdp1(t,y) with a constant step size of 0.1, % and plots the first component of the solution.%if ~isnumeric(tspan)error('TSPAN should be a vector of integration steps.');endif ~isnumeric(y0)error('Y0 should be a vector of initial conditions.');endh = diff(tspan);if any(sign(h(1))*h <= 0)error('Entries of TSPAN are not in order.')endtryf0 = feval(odefun,tspan(1),y0,varargin{:});catchmsg = ['Unable to evaluate the ODEFUN at t0,y0. ',lasterr];error(msg);endy0 = y0(:); % Make a column vector.if ~isequal(size(y0),size(f0))error('Inconsistent sizes of Y0 and f(t0,y0).');endneq = length(y0);N = length(tspan);Y = zeros(neq,N);F = zeros(neq,3);Y(:,1) = y0;for i = 2:Nti = tspan(i-1);hi = h(i-1);yi = Y(:,i-1);F(:,1) = feval(odefun,ti,yi,varargin{:});F(:,2) = feval(odefun,ti+0.5*hi,yi+0.5*hi*F(:,1),varargin{:});F(:,3) = feval(odefun,ti+0.75*hi,yi+0.75*hi*F(:,2),varargin{:});Y(:,i) = yi + (hi/9)*(2*F(:,1) + 3*F(:,2) + 4*F(:,3));endY = Y.';ODE4 四阶龙格-库塔法CODE:function Y = ode4(odefun,tspan,y0,varargin)%ODE4 Solve differential equations with a non-adaptive method of order 4.% Y = ODE4(ODEFUN,TSPAN,Y0) with TSPAN = [T1, T2, T3, ... TN] integrates % the system of differential equations y' = f(t,y) by stepping from T0 to% T1 to TN. Function ODEFUN(T,Y) must return f(t,y) in a column vector.% The vector Y0 is the initial conditions at T0. Each row in the solution% array Y corresponds to a time specified in TSPAN.%% Y = ODE4(ODEFUN,TSPAN,Y0,P1,P2...) passes the additional parameters % P1,P2... to the derivative function as ODEFUN(T,Y,P1,P2...).%% This is a non-adaptive solver. The step sequence is determined by TSPAN % but the derivative function ODEFUN is evaluated multiple times per step.% The solver implements the classical Runge-Kutta method of order 4.%% Example% tspan = 0:0.1:20;% y = ode4(@vdp1,tspan,[2 0]);% plot(tspan,y(:,1));% solves the system y' = vdp1(t,y) with a constant step size of 0.1,% and plots the first component of the solution.%if ~isnumeric(tspan)error('TSPAN should be a vector of integration steps.');endif ~isnumeric(y0)error('Y0 should be a vector of initial conditions.');endh = diff(tspan);if any(sign(h(1))*h <= 0)error('Entries of TSPAN are not in order.')endtryf0 = feval(odefun,tspan(1),y0,varargin{:});catchmsg = ['Unable to evaluate the ODEFUN at t0,y0. ',lasterr]; error(msg);endy0 = y0(:); % Make a column vector.if ~isequal(size(y0),size(f0))error('Inconsistent sizes of Y0 and f(t0,y0).');endneq = length(y0);N = length(tspan);Y = zeros(neq,N);F = zeros(neq,4);Y(:,1) = y0;for i = 2:Nti = tspan(i-1);hi = h(i-1);yi = Y(:,i-1);F(:,1) = feval(odefun,ti,yi,varargin{:});F(:,2) = feval(odefun,ti+0.5*hi,yi+0.5*hi*F(:,1),varargin{:}); F(:,3) = feval(odefun,ti+0.5*hi,yi+0.5*hi*F(:,2),varargin{:}); F(:,4) = feval(odefun,tspan(i),yi+hi*F(:,3),varargin{:});Y(:,i) = yi + (hi/6)*(F(:,1) + 2*F(:,2) + 2*F(:,3) + F(:,4));endY = Y.';定步长RK4(自编):CODE:function Y=RungeKutta4(f,xn,y0)% xn=0:.1:1;% y0=1;% y_n=[];% f=@(X1,Y1) Y1-2*X1/Y1;y_n=[];h=diff(xn(1:2));for i=1:length(xn)-1K1=f(xn(i),y0);K2=f(xn(i)+h/2,y0+h*K1/2);K3=f(xn(i)+h/2,y0+h*K2/2);K4=f(xn(i)+h,y0+h*K3);y_n=[y_n;y0+h/6*(K1+2*K2+2*K3+K4)];y0=y_n(end);endY=y_n;ODE5 五阶龙格-库塔法CODE:function Y = ode5(odefun,tspan,y0,varargin)%ODE5 Solve differential equations with a non-adaptive method of order 5.% Y = ODE5(ODEFUN,TSPAN,Y0) with TSPAN = [T1, T2, T3, ... TN] integrates % the system of differential equations y' = f(t,y) by stepping from T0 to% T1 to TN. Function ODEFUN(T,Y) must return f(t,y) in a column vector.% The vector Y0 is the initial conditions at T0. Each row in the solution% array Y corresponds to a time specified in TSPAN.%% Y = ODE5(ODEFUN,TSPAN,Y0,P1,P2...) passes the additional parameters % P1,P2... to the derivative function as ODEFUN(T,Y,P1,P2...).%% This is a non-adaptive solver. The step sequence is determined by TSPAN % but the derivative function ODEFUN is evaluated multiple times per step.% The solver implements the Dormand-Prince method of order 5 in a general % framework of explicit Runge-Kutta methods.%% Example% tspan = 0:0.1:20;% y = ode5(@vdp1,tspan,[2 0]);% plot(tspan,y(:,1));% solves the system y' = vdp1(t,y) with a constant step size of 0.1,% and plots the first component of the solution.if ~isnumeric(tspan)error('TSPAN should be a vector of integration steps.');endif ~isnumeric(y0)error('Y0 should be a vector of initial conditions.');endh = diff(tspan);if any(sign(h(1))*h <= 0)error('Entries of TSPAN are not in order.')endtryf0 = feval(odefun,tspan(1),y0,varargin{:});catchmsg = ['Unable to evaluate the ODEFUN at t0,y0. ',lasterr];error(msg);endy0 = y0(:); % Make a column vector.if ~isequal(size(y0),size(f0))error('Inconsistent sizes of Y0 and f(t0,y0).');endneq = length(y0);N = length(tspan);Y = zeros(neq,N);% Method coefficients -- Butcher's tableau%% C | A% --+---% | BC = [1/5; 3/10; 4/5; 8/9; 1];A = [ 1/5, 0, 0, 0, 03/40, 9/40, 0, 0, 044/45 -56/15, 32/9, 0, 019372/6561, -25360/2187, 64448/6561, -212/729, 0 9017/3168, -355/33, 46732/5247, 49/176, -5103/18656];B = [35/384, 0, 500/1113, 125/192, -2187/6784, 11/84]; % More convenient storageA = A.';B = B(:);nstages = length(B);F = zeros(neq,nstages);Y(:,1) = y0;for i = 2:Nti = tspan(i-1);hi = h(i-1);yi = Y(:,i-1);% General explicit Runge-Kutta frameworkF(:,1) = feval(odefun,ti,yi,varargin{:});for stage = 2:nstageststage = ti + C(stage-1)*hi;ystage = yi + F(:,1:stage-1)*(hi*A(1:stage-1,stage-1));F(:,stage) = feval(odefun,tstage,ystage,varargin{:});endY(:,i) = yi + F*(hi*B);endY = Y.';-------------------------------------------------------------------------------------------------------------------自适应步长RKF45(相当于ode45)ODE45 是4阶方法提供候选解,5阶方法控制误差。
龙格库塔法介绍
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)是否满足
龙格-库塔法
四阶龙格-库塔法求解常微分方程的初值问题1.算法原理对于一阶常微分方程组的初值问题⎪⎪⎪⎩⎪⎪⎪⎨⎧=⋯⋯==⋯⋯=⋯⋯⋯⋯=⋯⋯=0020********'212'2211'1)(,,)(,)())(,),(),(,()())(,),(),(,()())(,),(),(,()(n n n n n n n y x y y x y y x y x y x y x y x f x y x y x y x y x f x y x y x y x y x f x y , 其中b x a ≤≤。
若记Tn Tn Tn y x f y x f y x f y x f y y y y x y x y x y y x y )),(,),,(),,((),(),,,())(),(),(()(2102010021⋯⋯=⋯⋯=⋯⋯=,,则可将微分方程组写成向量形式⎩⎨⎧=≤≤=0')()),(,()(y a y b x a x y x f x y微分方程组初值问题在形式上和单个微分方程处置问题完全相同,只是数量函数在此变成了向量函数。
因此建立的单个一阶微分方程初值问题的数值解法,可以完全平移到求解一阶微分方程组的初值问题中,只不过是将单个方程中的函数转向向量函数即可。
标准4阶R-K 法的向量形式如下:⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧++=++=++==++++=+),()21,2()21,2(),()22(61342312143211K y h x hf K K y h x hf K K y h x hf K y x hf K K K K K y y n n n n n n n n n n 其分量形式为n j K y K y K y h x hf K K y K y K y h x hf K K y K y K y h x hf K y y y x hf K K K K K y y n ni i i i j j n nii i i j j n nii i i j j ni i i i j j j j j j i j i j ,,2,1).,,,;(),2,2,2;2(),2,2,2;2(),,,,;(),22(6132321314222212131212111221143211,1,⋯⋯=⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧+⋯⋯+++=+⋯⋯+++=+⋯⋯+++=⋯⋯=++++=++,,2.程序框图3.源代码%该函数为四阶龙格-库塔法function [x,y]=method(df,xspan,y0,h)%df为常微分方程,xspan为取值区间,y0为初值向量,h为步长x=xspan(1):h:xspan(2);m=length(y0);n=length(x);y=zeros(m,n);y(:,1)=y0(:);for i=1:n-1k1=feval(df,x(i),y(:,i));k2=feval(df,x(i)+h/2,y(:,i)+h*k1/2);k3=feval(df,x(i)+h/2,y(:,i)+h*k2/2);k4=feval(df,x(i)+h,y(:,i)+h*k3);y(:,i+1)=y(:,i)+h*(k1+2*k2+2*k3+k4)/6;end%习题9.2clear;xspan=[0,1];%取值区间h=0.05;%步长y0=[-1,3,2];%初值df=@(x,y)[y(2);y(3);y(3)+y(2)-y(1)+2*x-3];[xt,y]=method(df,xspan,y0,h)syms t;yp=t*exp(t)+2*t-1;%微分方程的解析解yp1=xt.*exp(xt)+2*xt-1%计算区间内取值点上的精确解[xt',y(1,:)',yp1']%y(1,:)为数值解,yp1为精确解ezplot(yp,[0,1]);%画出解析解的图像hold on;plot(xt,y(1,:),'r');%画出数值解的图像4.计算结果。
计算方法 15 龙格库塔-常微分方程
以上公式就是三阶龙格-库塔公式
计算方法(2016/2017 第一学期)
西南科技大学
制造科学与工程学院
11
四阶龙格-库塔公式
四阶龙格-库塔公式:
h yn1 yn 6 ( k1 2k2 2k3 k4 ) k1 f ( xn , yn ) h hk1 ) k2 f ( xn , yn 2 2 h hk2 k3 f ( xn 2 , yn 2 ) k4 f ( xn h, yn hk3 )
以上公式就是四阶龙格-库塔公式
也称作经典龙格-库塔公式
计算方法(2016/2017 第一学期) 西南科技大学 制造科学与工程学院
12
高阶龙格-库塔公式
高阶龙格-库塔公式:
yn1 yn h( λ1k1 λ2 k2 λ3 k3 λm km ) k1 f ( xn , yn ) k2 f ( xn 2 h, yn 21hk1 ) k3 f ( xn 3 h, yn 31hk1 32 hk2 ) km f ( xn m h, yn m1hk1 m ( m 1) hkm 1 ) i (i 2,, m) 和 ij (i 2,, m; 其中 i (i 1,, m),
14
龙格-库塔公式
由于龙格-库塔法的导出基于泰勒展开,故精度
主要受解函数的光滑性影响。
对于光滑性不好的解,最好采用低阶算法来求解,
而将步长 h 取小。
计算方法(2016/2017 第一学期)
西南科技大学
制造科学与工程学院
15
例题
例:利用四阶龙格-库塔方法求解微分方程的
龙格-库塔方法-文档资料
c3a 2b32
c3a3 1
6
; 2
O (h4)
常见的2种三阶方法:
库塔三阶方法
h yn1yn6(k14k2k3)
k1
f(xn,yn);
k2
hh f(xn2,yn2k1)
k 3 f(x n h ,y n h k 1 2 h k 2 ) •5
四级方法:N = 4
局部截断误差 O ( h 5 )
可见误差随着 x n 的增加呈指数函数递减
当 f y 0 时,微分方程是不稳定的; 而 f y 0 时,微分方程是稳定的。
上面讨论的稳定性,与数值方法和方程中 f 有关
•21
实验方程: y y C ,R e () 0
D e f 3 对单步法 yn 1ynh(xn,yn,h )应用实验方程,
e n 1 e n h [ ( x n ,y ( x n ) , h ) ( x n ,y n , h ) ] T n 1
•15
因为单步法是 p 阶的:h0,0hh0满足|Tn1|Chp1
|e n 1| |e n| h L |e n| C h p 1|en |
其中 1hL,C hp1
•18
三、绝对稳定性 /*Absolute Stibility*/ 计算过程中产生的舍入误差对计算结果的影响
首先以Euler公式为例,来讨论一下舍入误差的传播:
yn1ynhf(xn,yn)
设实际计算得到的点 x n 的近似函数值为 yn yn n,
其中 y n 为精确值, n 为误差
yn1ynhf(xn,yn)
通过适当选取参数 1,2和 p 的值,使得公式具有 2阶精度!!
•3
由泰勒公式展开,要使公式具有 2 阶精度,只需
数值分析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 吗?
将改进欧拉法推广为:
龙格-库塔方法(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值(即由前面(i-1)个已算出的表示,故公式是显式的.例),而ki如当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个,所应满足的方程为(3.2.10)这是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 。
龙格库塔法推导
即 K hy(xi ) hf [xi, y(xi )]
hf (xi, yi )
则上式化为
如下图
y
y y(x)
yi1 yi hf (xi , yi )
K
K
即Euler方法
xi
Euler方法也称为一阶Runge-Kutta方法
xi1
x
2019/12/20
10
9.4.2 二阶龙格—库塔法
yi
b21K1)
K2
y y(x)
K3
K1
K
K3 hf (xi a3h, yi b31K1 b32K2 )
2019/12/20
xi
xia2
xia3
x
18
同理推导二阶公式,将y(xi+1)和yi+1在x=xi处进 行Taylor展开,使局部截断误差达到O(h4),使对
应项的系数相等,得到系数方程组:
2019/12/20
12
K2 h f (xi , yi) a2hfx b21K1 f y O(h2)
h f (xi , yi ) a2hfx b21hff y O(h3)
K1 =hf(xi, yi)
yi1 yi (c1K1 c2K2)
1 就是二阶龙格
2
-
库塔
公式,也就是改进的欧拉法。
y
K2
yi 1
yi
1 2
K1
K2
K1 hf (xi , yi )
y y(x)
K1
K
K2 hf (xi h, yi K1)
xi
(完整版)第二节龙格-库塔方法
因为单步法是 p阶的:h0 , 0 h h0 满足| Tn1 | Chp1
| en1 || en | hL | en | Ch p1 | en |
其中 1 hL, Ch p1
en O(hp )
即取
K * 1K1 2 K2 yi1 yi h(1K1 2 K2 )
其中1 和 2 是待定常数。若取 K1 f ( xi , yi ) ,则
问题在于如何确定 xi p 处的斜率 K2 和常数 1 和 2 。
仿照改进的欧拉方法,用欧拉方法预测 y( xi p ) 的值,
yi p yi phK1
k2
f ( xn
h 2
,
yn
h 2 k1)
hh k3 f ( xn 2 , yn 2 k2 )
k4 f ( xn h, yn hk3 )
例2:用经典的龙格-库塔方法
求解下列初值问题 h 0.1
dy 。 dx
y
2x y
x (0,1)
解:经典的四阶龙格-库塔公式: y(0) 1
E(h) 1 h
绝对稳定域: 1 h 1
当 R 时, 1 h 1 2 h 0
绝对稳定区间:(2, 0)
❖经典的R-K公式:yn1
yn
h 6
(k1
2k2
2k3
k4 )
k1 f ( xn , yn ) yn
k2
f
(
yn1 yn hf ( xn , yn )
n1 yn1 yn1
n1 n h[ f ( xn , yn ) f ( xn , yn )] [1 hf y ( xn , )]n
龙格库塔法
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).
三、三、四阶龙格—库塔法
三阶龙格—库塔法
第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 龙格-库塔方法概述
定义与原理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
y y( x)
K2
K
K3
K1
xi
2015/9/17
xi a2
xi a3
18
x
同理推导二阶公式,将y(xi+1)和yi+1在x=xi处进 行Taylor展开,使局部截断误差达到O(h4),使对 应项的系数相等,得到系数方程组:
c1 c2 c3 1 a c a c 1 , 3 3 2 2 2 1 2 2 a c a c , 2 2 3 3 3 1 2 2 b21c2 (b31 b32 ) c3 3 a b c 1 , 2 32 2 6
2015/9/17 2
显然p=1时,
y i+1=y i+hf(xi,y i)
它即为我们熟悉的Euler方法。 当p≥2时,要利用泰勒方法就需要计算f(x,y)的高 阶微商。这个计算量是很大的,尤其当f(x,y)较复 杂时,其高阶导数会很复杂。因此,利用泰勒公 式构造高阶公式是不实用的。但是泰勒级数展开 法的基本思想是许多数值方法的基础。 R-K方法不是直接使用Taylor级数,而是利用它的思想
2015/9/17 5
于是可考虑用函数f(x,y)在若干点上的函数值的 线性组合来构造近似公式,构造时要求近似公式在 (xi,yi)处的Taylor展开式与解y(x)在xi处的Taylor展开式 的前面几项重合,从而使近似公式达到所需要的阶数。 既避免求高阶导数,又提高了计算方法精度的阶数。 或者说,在[xi,xi+1]这一步内多计算几个点的斜率值, 然后将其进行加权平均作为平均斜率,则可构造出更 高精度的计算格式,这就是龙格—库塔(RungeKutta)法的基本思想。
2015/9/17 16
二级R-K方法是显式单步式,每前进一步需要计算两个
函数值。由上面的讨论可知,适当选择四个参数c1,c2,a2,
b21 ,可使每步计算两次函数值的二阶 R-K 方法达到二阶 精度。能否在计算函数值次数不变的情况下,通过选择不 同的参数值,使得二阶R-K方法的精度再提高呢? 答案是否定的!无论四个参数怎样选择 ,都不能使公 式的局部截断误差提高到三阶。 这说明每一步计算两个函数值的二阶 R-K方法最高阶 为二阶。若要获得更高阶得数值方法,就必须增加计算函 数值的次数。
K hy(i ) hf i , y (i )
yi 1 yi K
K可以认为是y y( x)在区间 [ xi , xi 1 ]上的平均斜率
y
只要使用适当的方法求 出y ( x)在区 间[ xi , xi 1 ]上平均斜率的近似值 K
y y( x)
K
就可得到相应的Runge-Kutta方法
2015/9/17
xi
xi 1
x
9
如果以y( x)在xi处的斜率作为 y( x)在[ xi , xi 1 ]上的平均斜率 K
即
K hy( xi ) hf [ xi , y ( xi )]
hf ( xi , yi )
如下图
y
则上式化为
yi 1 yi hf ( xi , yi )
K 2 hf ( xi a2h, yi b21K1)
确定系数 c1、c2、a2、b21 ,可得到有2阶精度的算法格式
2015/9/17 11
因此
y ( xi 1 ) y ( xi ) K
y ( xi ) (c1K1 c2 K 2 )
将y(xi+1)在x=xi处进行Taylor展开: h2 y( xi 1) y( xi ) hy( xi ) y( xi ) O(h3 ) 2! h2 ff y O(h3 ) y( xi ) hf ( xi , yi ) fx 2!
将 K 2 hy( xi a2h) hf ( xi a2h, yi b21K1) 在x=xi处进行Taylor展开:
2015/9/17 12
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)
K
K
即Euler方法
xi
xi 1
x
Euler方法也称为一阶Runge-Kutta方法
2015/9/17 10
9.4.2
二阶龙格—库塔法
在[xi, xi+1]上取两点xi和xi+a2= xi +a2h,以该两点处 的斜率值K1和K2的加权平均(或称为线性组合)来求取 平均斜率k*的近似值K,即 K c1K1 c2 K 2 式中:K1为xi点处的切线斜率值 K1 =hf(xi, yi)=hy'(xi) K2为xi +a2h点处的切线斜率值,比照改进的欧 拉法,将xi+a2视为xi+1,即可得
2015/9/17 4
同理,改进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)的值,为二阶方法。
称为P阶龙格-库塔方法。 其中ai,bij,ci为待定参数,要求上式yi+1在点(xi,yi)处作 Tailor展开,通过相同项的系数确定参数。
2015/9/17 7
Runge-Kutta方法的推导思想 对于常微分方程的初值问题
y f ( x , y ) y( a ) y0 a xb
h2 y( xi 1 ) y( xi ) hy( xi ) y( xi ) O(h3 ) 2 yi hf ( xi , yi )
h2 ( xi , yi ) O(h 3 ) f x ( xi , yi ) f ( xi , yi ) f y 2
类似地,若取前P+1项作为y(xi+1)的近似值,便得到
§
9.4 龙格-库塔方法
得到高精度方法的一个直接想法是利用Taylor展开
假设式 y' =f(x,y) (a≤x≤b) 中的 f(x,y) 充分光滑,将y(xi+1)在x i点作Taylor展开,若 取右端不同的有限项作为y(xi+1)的近似值,就可得到 计算y(xi+1)的各种不同截断误差的数值公式。
2015/9/17
6
一般龙格-库塔方法的形式为
yi 1 yi c1K1 c2 K 2 c p K p K1 hf ( xi , yi ) K 2 hf ( xi a2h, yi b21K1 ) • • • • • • • • • • • K p hf ( xi a p h, yi b p1K1 b p , p 1K p 1 )
yi 1
h2 h P ( P) yi hyi yi yi 2! P!
P阶泰勒方法
其中 yi f , yi f ( xi , yi ) x f x ff y )x f xx 2 f xy f f yy f 2 f x f y ( fy )2 f yi ( f x ff y
的解y=y(x),在区间[xi, xi+1]上使用微分中值定理,有
y( xi 1 ) y( xi ) y ( i )( xi 1 xi )
其中 i ( xi , xi 1 )
即
2015/9/17
y( xi 1 ) y( xi ) hy( i )
8
引入记号
y ( xi 1) y ( xi ) K
2015/9/17 3
Runge-Kutta 方法是一种高精度的单步法,简称R-K法
9.4.1 龙格-库塔(R-K)法的基本思想
Euler公式可改写成
yi 1 yi K K hf ( xi , yi )
则 yi+1 的表达式与 y(xi+1) 的 Taylor 展开式的前两项 完全相同,即局部截断误差为O(h2)。
2015/9/17
1 b21c2 (b31 b32 )c3 2 a 2 b21c2 a3c3 (b31 b32 ) 1 3
1 b21b32 c3 6
19
参数的选择不唯一,从而构成一类不同的三阶R-K 公式,下面给出一种常用的三阶R-K公式,形似 simpson公式:
1 yi 1 yi 6 ( K1 4 K 2 K 3 ) K1 hf ( xi , yi ) K hf ( x h , y 1 K ) i i 1 2 2 2 K hf ( x h, y K 2 K ) i i 1 2 3
b21c2h2 ff y O(h3 ) a2c2h2 f x
2015/9/17 13
令 y ( xi 1 ) yi 1 对应项的系数相等,得到
1 1 c1 c2 1 , a2c2 , b21c2 2 2
这里有 4 个未知 数,3 个方程。
存在无穷多个解。所有满足上式的格式统称为2阶 龙格 - 库塔格式。
K1
K
xi
xi 1
x
因此,凡满足条件式有一簇形如上式的计算格 式,这些格式统称为二阶龙格—库塔格式。因此改 进的欧拉格式是众多的二阶龙格—库塔法中的一种 特殊格式。