龙格库塔法推导
龙格-库塔方法基本原理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)法 1.1 龙格-库塔(Runge-Kutta)法的基本思想
Euler公式可改写成
yi1 yi hK1 K1 f ( xi , yi )
则yi+1的表达式y(xi+1)与的Taylor展开式的前两项 完全相同,即局部截断误差为 O(h 2 ) 。
为了进一步提高精度,设除 xi p 外再增加一点
xiq xi qh ( p q 1)
并用三个点 xi ,xi p , xiq 的斜率k1,k2,k3加权平均
得出平均斜率k*的近似值,这时计算格式具有形式:
yi1 yi h(1 )k1 k2 k3
k1 f (xi , yi ) k2 f (xi ph, yi phk1 )
格式。
若取 1 0 ,则 2 法的计算公式为
1,
p
1 2
,此时二阶龙格-库塔
ky1i
1
f
yi hk2 ( xi , yi )
k
2
h
f
(
x
i
1
,
yi
2
2 k1 )
i 0,1,2, n 1
此计算公式称为变形的二阶龙格—库塔法。式中
x 1 i 2
为区间
xi , xi1
的中点。
1.3 三阶龙格-库塔法
拉法,将 xi p 视为 xi1,即可得
k2 f (xi ph, yi phk1 ) 对常微分方程初值问题(7.1)式的解 y=y(x),根据微 分中值定理,存在点 (xi , xi1 ) ,使得
也即
y(xi1 ) y(xi ) y( )( xi1 xi )
y( xi1 ) y( xi ) hK
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.计算结果。
龙格库塔法推导
于是可考虑用函数f(x,y)在若干点上的函数值的 线性组合来构造近似公式,构造时要求近似公式在 (xi,yi)处的Taylor展开式与解y(x)在xi处的Taylor展开式 的前面几项重合,从而使近似公式达到所需要的阶数。 既避免求高阶导数,又提高了计算方法精度的阶数。 或者说,在[xi,xi+1]这一步内多计算几个点的斜率值, 然后将其进行加权平均作为平均斜率,则可构造出更 高精度的计算格式,这就是龙格—库塔(Runge龙格— 龙格 库塔( Kutta)法的基本思想 )法的基本思想。
[
]
K1 =hf(xi, yi)
∴
yi +1 = yi + (c1K1 + c2 K 2 )
= y ( xi ) + c1hf ( xi , yi )
′ ′ + c2 h f ( xi , yi ) + a2 hf x + b21hff y + O ( h 3 )
[
]
= y ( xi ) + (c1 + c2 ) hf ( xi , yi )
存在无穷多个解。所有满足上式的格式统称为2阶 无穷多个解。 无穷多个解 阶 龙格 - 库塔格式。 库塔格式。
2011-12-8 14
1 注意到, 就是二阶龙格 注意到,a 2 = b21 = 1, c1 = c2 = 就是二阶龙格 - 库塔 2 y 公式,也就是改进的欧拉法 改进的欧拉法。 公式,也就是改进的欧拉法。 K2
称为P阶龙格-库塔方法。 其中ai,bij,ci为待定参数,要求上式yi+1在点(xi,yi)处作 Tailor展开,通过相同项的系数确定参数。
2011-12-8 7
龙格库塔方程
龙格库塔方程1.介绍龙格-库塔(RK)方法是求解常微分方程(ODE)最常见的数值方法之一。
对于大多数非线性ODE问题,解析解并不存在或难以获得,因此需要使用数值方法来近似计算解。
RK方法通过迭代逼近ODE的解来得到精确性可控、收敛性好、易实现的数值解。
RK方法的基本思想是将ODE中的一阶导数转化为一组计算步骤,以得到相邻时间点之间的函数值和一阶导数的近似值,然后将其结合起来得到一个更精确的解。
2.RK方法的推导RK方法的推导过程是基于欧拉方法的,欧拉方法是RK方法的一阶近似。
假设有ODE$\frac{dx}{dt}=f(x,t)$,欧拉方法的迭代公式为$$x_{n+1}=x_n+hf(x_n,t_n)$$其中$h$是时间步长,$t_n=n*h$。
这个公式的意思是,从$x_n$开始,用一阶导数$f(x_n,t_n)$来列出切线,然后沿着切线向前移动$h$个单位,得到$x_{n+1}$。
更高阶的RK方法则基于更精细的近似。
例如,经典的四阶RK方法(RK4)迭代公式为:\begin{align*}k_1&=f(x_n,t_n)\\k_2&=f(x_n+\frac{h}{2}k_1,t_n+\frac{h}{2})\\k_3&=f(x_n+\frac{h}{2}k_2,t_n+\frac{h}{2})\\k_4&=f(x_n+h k_3,t_n+h)\\x_{n+1}&=x_n+\frac{h}{6}(k_1+2k_2+2k_3+k_4)\end{align*}其中,$k_1$是欧拉方法的一阶导数解,依次计算得到更高阶的导数近似值$k_2-k_4$。
3.RK方法的优势RK方法与其他数值方法相比具有众多优点。
首先,RK方法的精度可控。
通过增加迭代次数或者近似阶次,RK 方法可以获得任意高的精度。
这个特性非常适用于涉及长时间尺度和小尺度特征的问题,例如天气预报,需要同时精确地处理地球的自转和大气的扰动。
龙格库塔
xn p xn ph, 0 q 1
xnq xn qh, p q 1
于是就可以构造所谓的三阶龙格-库塔格式 ,下列库塔 格式是其中的一种:
yn
1
yn
K1
f
(xn ,
h 6 (K1 yn )
4K2
K3)
K2 f (xn p , yn hK1)
K
3
f ( xn1, yn
h(K1 2K2 ))
3.3 龙格-库塔讲义
——《数值分析简明教程》
主讲:王老师
黄淮学院数学科学系
2011-3-16
暮春三月,草长莺飞
1
❖ 考察差商 y(xn1) y(xn ) ,根据微分中值定理存在
点 ,使得
h
1.龙格 库塔y' 的f 设计思想
从而利用所给方程 得 y(xn1) y(xn ) y'( )
h
yxn+1 yxn hf , y ,xn xn1
y y(x)
K*
xn
2011-3-16
暮春三月,草长莺飞
x n 1
x
3
2.二阶龙格-库塔方法
随意考察区间 xn, xn1 内 一点
xn+p xn ph, 0 p 1
用两个点 xn , xn p 的斜率的K1 , K2的加权平均 代替平均斜率 K ,于是我们就得到如下计算 格式:
yn1 K1 f
则
f (Kxn ,2yn )
如下图
y
y y(x)
K1
yn1 yn hf (xn , yn )
xn
xn 1
x
2011-3-16
暮春三月,草长莺飞
5
适当选取它们的值,就可使上述格式有较高
Runge-Kutta算法
Yn 1 Yn h(c1 K1 c2 K 2 c3 K 3 ) K F (t , Y ) 1 n n K 2 F (t n 2 h, Yn 21hK1 ) K 3 F (t n 3 h, Yn 31hK1 32 hK2 )
例
y (0) 1.
步长都取为 h 0.1 分别用以下两种系数:
1 1. a , 改进的Euler 法: 2 1 c1 c2 , 2 21 1. 2 积分公式: yn 1 y 0.1 y
n 2 n
yn 0.1 y
2 2 n
2
1 2. a , 3 2 1 3 c1 , c2 , 2 21 . 3 3 2 积分公式:
2 2 yn 1 yn 0.1 2 yn yn 3 0.1 yn 2
3
2
结果及比较
三阶显式Runge-Kutta方法
在推导二阶显式方法的过程中,注意到局部截断误差表达式中h3项 包含了以下表达式: Yn Ftt(t n ,Yn ) 2 FtY (t n ,Yn )Fn FYY (t n ,Yn )Fn2 FY(t n ,Yn )Ft n ,Yn ) FY(t n ,Yn )Fn (t 因此若要在局部截断误差中消去h3项,必须增加包含了以上各项的 多个方程,同时我们注意到r=2时,只有c1,2 , 1 , 21 等四个待定系数, 少于方程的数目,所以这样的系数不存在。故: r=2时Runge-Kutta 方法只能是二阶的。要得到三阶的方法,则必须有r=3。
类似前面的推导,可以导出更高阶的Runge Kutta公式. 关于Runge Kutta方法,有以下几点需要特别指出:
龙格库塔公式
龙格-库塔(Runge-Kutta)公式是一种常用于数值解求微分方程的方法,其中包括了多种不同类型的龙格-库塔公式.
其中最常见的是四阶龙格-库塔公式(Runge-Kutta 4th order method),这种方法通过在当前时刻的函数值和当前时刻的导函数的近似值计算下一时刻的函数值。
它的计算公式如下:
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)
yn+1 = yn + (k1 + 2k2 + 2k3 + k4)/6
xn+1 = xn + h
其中k1,k2,k3,k4 是近似值,f(x,y)是微分方程,xn, yn 是当前时刻的函数值,xn+1, yn+1 是下一时刻的函数值, h是时间步长.
这种方法具有较高的精度,并且易于实现,但在求解某些类型的方程时,会存在稳定性问题.
除此之外,还有其他类型的龙格-库塔公式,比如二阶、三阶等等,它们也有各自的适用条件.。
龙格库塔法推导
2
ቤተ መጻሕፍቲ ባይዱ
[
]
yi +1
h2 h P ( P) = yi + hyi′ + yi′′ + L + yi 2! P!
P阶泰勒方法
其中 yi′ = f , yi′′ = f ( xi , yi )′ x = f x′ + ff y′
例如: 例如:取前两项可得到
y ( xi +1 ) = y ( xi ) + hy ′( xi ) + O(h 2 )
= y ( xi ) + hf ( xi , y ( xi )) + O(h 2 ) = yi + hf ( xi , yi ) + O(h 2 )
2011-12-8 1
若取前三项,可得到截断误差为 若取前三项,可得到截断误差为O(h3)的公式 的公式
y
则上式化为
y = y(x)
yi +1 = yi + hf ( xi , yi )
即Euler方法
K
K
xi
xi +1
x
Euler方法也称为一阶 一阶Runge-Kutta方法 一阶 方法
2011-12-8 10
二阶龙格— 9.4.2 二阶龙格—库塔法 在[xi, xi+1]上取两点xi和xi+a2= xi +a2h,以该两点处 的斜率值K1和K2的加权平均(或称为线性组合)来求取 平均斜率k*的近似值K,即 K = c1 K 1 + c 2 K 2 式中:K1为xi点处的切线斜率值 K1 =hf(xi, yi)=hy'(xi) K K2为xi +a2h点处的切线斜率值,比照改进的欧 拉法,将xi+a2视为xi+1,即可得
第7-3龙格-库塔方法
一、Taylor展开法
设 y f ( x, y)Βιβλιοθήκη y( x0 ) y0
(1)
在[a,b]上有解 y( x),将y( xn1 )在xn处泰勒展开
y( xn1 )
y( xn )
hy( xn )
h2 2!
y( xn )
h3 3!
y( xn )
截取有限项作为 y( xn1 ) 的近似值,有
四、三阶及四阶龙格-库塔公式
三阶龙格—库塔公式有:
yn1 k1 k2
f f
h yn 6 (k1 ( xn , yn )
1 ( xn 2 h,
4k2 k3 h
yn 2 k1 )
)
k3 f ( xn h, yn hk1 2hk2 )
yn1 k1 k2
f f
1 (h n! x
k )n y
f ( x0, y0 )
(n
1 (h 1)! x
k
)n1 y
f
( x0
h,
y0
k)
(0 1)
其中记号
(h
x
k
y
)
f
(
x0
,
y0
)=hf
x
(
x0
,
y0
)
kf
y
(
x0
,
y0
)
(h
x
k
)2 y
f
(
x0 ,
y0
)
h2
f
xx (
x0 ,
y0
)
2hkf
f ( xn , yn ) h(c2 f x ( xn , yn ) a21k1 f y ( xn , yn )) O(h2 ) f ( xn , yn ) h(c2 f x ( xn , yn ) a21 f y ( xn , yn ) f ( xn , yn )) O(h2 )
数值分析72龙格—库塔方法剖析
半计算,直至Δ<ε为止,这时取最终得到的 作为结yn果h21;
2.如果Δ<ε,我们将反复将步长作加倍计算,直 至Δ>ε为止,这时再将步长折半计算一次,就得到所
要的结果. 这种通过加倍或折半处理步长的方法称为变步长
方法.表面上看,为了选择步长,每一步的计算量增 加了,但总体考虑往往是合算的.
其中
y( xn1)
yn
hyn
h2 2
yn
h3 3!
ynO(h4 ),来自ynf ( xn, yn )
fn,
yn
d dx
f ( xn , y( xn ))
f x( xn , yn )
fn f y( xn , yn ),
yn
f xx 2 fn f xy
f
2 n
f
yy
f y[ f x
fn f y].
在选择步长时,需要考虑两个问题:
1. 怎样衡量和检验计算结果的精度?
2. 如何依据所获得的精度处理步长?
我们考察四阶R-K公式(3.13) ,从节点xn出发,
先以h为步长求出一个近似值,记为 yn(h)1,由于公式
的局部截断误差为O(h5),故
y( xn1 )
y(h) n1
ch5 ,
(3.14)
然后将步长折半,即取为步长
yn1
yn
h 2 (K1
K2 ),
K1 f ( xn , yn ),
K
2
f ( xn1 , yn hK1 ).
如取a=1,则c1=0, c2=1, λ2=μ21=1/2. 得计算公式
yn1
yn
二阶龙格库塔公式推导_二阶龙格库塔公式.ppt
⼆阶龙格库塔公式推导_⼆阶龙格库塔公式.ppt⼆阶龙格库塔公式第⼀节 常微分⽅程 第⼆节 欧拉⽅法 第三节 龙格—库塔法 在上⼀节中,我们得到了⼀些求微分⽅程近似解的数值⽅法,这些⽅法的局部截断误差较⼤,精度较低,我们希望得到有更⾼阶精度的⽅法。
⼀阶龙格—库塔⽅法 如果以y(x)在xi处的斜率作为y(x)在 [xi,xi+1]上的平均斜率k*,即 ⼆阶龙格—库塔⽅法 在[xi,xi+1]上取两点xi,xi+p(0< p≤1)的斜率值k1,k2的线性组合λ1k1+λ2k2作为k*的近似值(λ1、λ2为待定常数),此公式⼀般形式可写成 这就是⼆阶龙格—库塔法公式。
三阶龙格—库塔公式 为了提⾼精度,考虑在[xi,xi+1]上取三点xi,xi+p,xi+q的斜率值分别为k1,k2,k3,将k1,k2,k3的线性组合作为平均斜率k*的近似值,其中 k* 这就是欧拉法. 则得 其中k1 = f (xi,yi),k2为[xi,xi+1]内任意⼀点xi+p = xi+ ph (0< p≤1) 的斜率f (xi+p,y(xi+p))。
由于y (xi+p)并没有给出,所以先应该求y(xi+p),仿照改进欧拉公式的构造思想,得到 (8-7) 这样构造出的公式为 k1 k2 k* 公式中含有三个参数λ1,λ2和p,如果我们适当选取参数的值,可以使公式的局部截断误差为O(h3)。
对k1和k2作泰勒展开 代⼊(8-7)得 (*) ⼜ y (x)在xi处的⼆阶泰勒展开式为 当x = xi+1时, ,有 (**) (**) ⽐较(*)与(**)的系数即可发现, 要使公式(7-7)的局部截断误差满⾜ ,即要求公式具有⼆阶 精度只要下列条件成⽴即可。
(8-8)满⾜条件(8-8)的⼀簇公式统称为 ⼆阶龙格—库塔公式。
特别的,当 塔公式就成为改进欧拉公式。
时,龙格-库 改进欧拉公式就是以y(x)在xi和xi+1 处的斜率k1和k2的算术平均 值作为y(x)在[xi,xi+1]上的 平均斜率k*来进⾏计算的。
第二节_龙格_库塔方法
yn1 yn hf ( xn , yn )
n1 yn1 yn1
n1 n h[ f ( xn , yn ) f ( xn , yn )] [1 hf y ( xn , )]n
如果 |1 hf y | 1,则误差是不增的,故可认为是稳定的
例如:对于初值问题
y y
y(
x0
)
a
精确解为
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
h
y
ae x x0
y y
而实际求解的初值问题为
y(
x0
)
a
a
精确解为 y (a a)e x x0在 xn 处的误差为ae xn x0
可见误差随着 xn的增加呈指数函数增长
y y
如果初值问题为
y( x0 ) a
精确解为 y ae x0 x
y y
实际求解的初值问题为
y( x0 )
2C( h)5 2
y( xn1)
y(h/ 2) n1
y( xn1)
y(h) n1
1 16
记
|
y(h/ 2) n1
y(h) n1
|
16( y( xn1)
y(h/ 2) n1
)
y( xn1)
y(h) n1
y( xn1)
y(h/ 2) n1
龙格库塔法
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
龙格库塔公式的推导
由于假定了 hn1 足够小,因此 (t n ) 基本不 变,故必须限制步长的缩小与放大,一 般限制的最大放缩系数为10,即要求:
0.1hn hn1 10hn
14
有关最优步长的控制,除此方法之外,还有吉 尔(Gear)法等。 采用最优步长控制后、 f 计算量有明显减少, 但上述两种控制方法对于函数中含有间断特性 的情况不适合。 因为在间断点附近会出现步长频繁放大、缩小 的振荡现象,由于最优步长控制法是以本步误 差外推下一步步长,因此振荡现象更为严重。
(3-5-22)
8
r=4时
同样可以得到常用的四阶RK公式:
h y n1 y n 6 (k1 2k 2 2k3 k 4 ) k f (t , y ) n n 1 h h k 2 f (t n , y n k1 ) 2 2 k f (t h , y h k ) n n 2 3 2 2 k 4 f (t n h, y n hk3 )
s 1 y () limsG( s)U ( s) lim s 1 2 2 s 0 s 0 ( s 1) s
18
由 G( z ) 可得:
z 1 y () lim G ( z )U ( z ) z 1 z z 1 K z ( z 1) Tz l im T 2 2 z 1 z ( z e ) ( z 1) K zT (1 e T ) 2
龙格库塔公式的推导
为了避免计算各阶导数和偏导数,将式 (3.5.12)写成 r y (t h) y (t ) h b k (3.5.13)
i 1
i i
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[
]
yi +1
h2 h P ( P) = yi + hyi′ + yi′′ + L + yi P! 2!
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 )
即
2014/9/2
y ( xi +1 ) = y ( xi ) + hy ′(ξ i )
8
引入记号
′ + b21c2 h 2 ff y ′ + O ( h3 ) + a2c2 h 2 f x
2014/9/2 13
令 y ( xi +1 ) = yi +1 对应项的系数相等,得到
1 1 c1 + c2 = 1 , a2c2 = , b21c2 = 2 2
这里有 4 个未知 数,3 个方程。
存在无穷多个解。所有满足上式的格式统称为2阶 龙格 - 库塔格式。
h2 y ( xi +1 ) = y ( xi ) + hy ′( xi ) + y ′′( xi ) + O(h 3 ) 2 = yi + hf ( xi , yi )
h2 ′ ( xi , y i ) + O ( h 3 ) f x′ ( xi , yi ) + f ′( xi , yi ) f y + 2
2014/9/2 14
1 注意到,a2 = b21 = 1, c1 = c2 = 就是二阶龙格 - 库塔 2 y 公式,也就是改进的欧拉法。 K2
yi +1 K1 K2
= = =
1 yi + (K1 + K 2 ) 2 hf ( xi , yi ) hf ( xi + h, yi + K1 )
y = y( x )
y ( xi +1 ) = y ( xi ) + 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
K 2 = hf ( xi + a2 h, yi + b21K1 )
确定系数 c1、c2、a2、b21 ,可得到有2阶精度的算法格式
2014/9/2 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 ) fx = y ( xi ) + hf ( xi , yi ) + 2!
2014/9/2 4
同理,改进Euler公式可改写成
1 1 yi +1 = yi + 2 K1 + 2 K 2 K1 = hf ( xi , yi ) K = hf ( x + h, y + K ) 1 i i 2
局部截断误差为O(h3)
上述两组公式在形式上共同点:都是用f(x,y)在某 些点上值的线性组合得出y(xi+1)的近似值yi+1, 且增 加计算的次数f(x,y)的次数,可提高截断误差的阶。如 欧拉法:每步计算一次f(x,y)的值,为一阶方法。改进 欧拉法需计算两次f(x,y)的值,为二阶方法。
2014/9/2 16
二级R-K方法是显式单步式,每前进一步需要计算两个 函数值。由上面的讨论可知,适当选择四个参数c1,c2,a2, b21 ,可使每步计算两次函数值的二阶 R-K 方法达到二阶 精度。能否在计算函数值次数不变的情况下,通过选择不 同的参数值,使得二阶R-K方法的精度再提高呢? 答案是否定的!无论四个参数怎样选择 ,都不能使公 式的局部截断误差提高到三阶。 这说明每一步计算两个函数值的二阶R-K方法最高阶 为二阶。若要获得更高阶得数值方法,就必须增加计算函 数值的次数。
y = y( x )
K
就可得到相应的Runge-Kutta方法
2014/9/2
xi xi +1
x
9
如果以y ( x)在xi 处的斜率作为y ( x)在[ xi , xi +1 ]上的平均斜率K
即
K = hy′( xi ) = hf [ xi , y ( xi )]
= hf ( xi , yi )
如下图
2014/9/2 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)。
K1
K
xi
xi +1
x
因此,凡满足条件式有一簇形如上式的计算格 式,这些格式统称为二阶龙格—库塔格式。因此改 进的欧拉格式是众多的二阶龙格—库塔法中的一种 特殊格式。
2014/9/2 15
1 若取 a2 = b21 = , c1 = 0, c2 = 1 ,就是另一种形式的二 2
阶龙格 - 库塔公式。
2014/9/2
17
9.4.3 三阶龙格—库塔法 为进一步提高精度,在区间[xi, xi+1]上除两点xi和 xi+a2= xi +a2h,以外,再增加一点xi+a3= xi +a3h ,用这 三点处的斜率值K1、K2和K3的加权平均得出平均斜率 K*的近似值K,这时计算格式具有形式:
y
yi +1 = yi + c1K1 + c2 K 2 + c3 K 3 K1 = hf ( xi , yi ) K 2 = hf ( xi + a2 h, yi + b21K1 ) K 3 = hf ( xi + a3h, yi + b31K1 + b32 K 2 )
称为P阶龙格-库塔方法。 其中ai,bij,ci为待定参数,要求上式yi+1在点(xi,yi)处作 Tailor展开,通过相同项的系数确定参数。
2014/9/2 7
Runge-Kutta方法的推导思想 对于常微分方程的初值问题
y′ = f ( x , y ) y(a ) = y0 a≤ x≤b
y
则上式化为
yi +1 = yi + hf ( xi , yi )
y = y( x )
K
K
即Euler方法
xi xi +1
x
Euler方法也称为一阶Runge-Kutta方法
2014/9/2 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,即可得
2014/9/2
6
一般龙格-库塔方法的形式为
yi +1 = yi + c1K1 + c2 K 2 + L + c p K p K1 = hf ( xi , yi ) K 2 = hf ( xi + a2 h, yi + b21K1 ) L L L L L L K p = hf ( xi + a p h, yi + b p1K1 + L + b p, p −1K p −1 )
例如:取前两项可得到
y ( xi +1 ) = y ( xi ) + hy ′( xi ) + O(h 2 )
= y ( xi ) + hf ( xi , y ( xi )) + O(h 2 ) = yi + hf ( xi , yi ) + O(h )
2014/9/2 1
2
若取前三项,可得到截断误差为O(h3)的公式
[
]
将 K 2 = hy′( xi + a2h) = hf ( xi + a2h, yi + b21K1 ) 在x=xi处进行Taylor展开: