2. 多步法:这类方法在计算yn+1的值时,除了需要知道xn+1、xn
和yn值外,还需要知道前k步的值。典型的方法如Adams法。 经典的R-K法是一个四阶的方法。它最大的优点就是它是单步法,精度高,计算过程便于改变步长。其缺点也很明显,计算量大,每前进一步就要计算四次函数值f。它的具体的计算公式如式(2)所示。
四阶Adams预测-校正方法是一个线性多步法,它是由Adams显式公式
?yn?1?yn?(K1?2K2?2K3?K4)h/6?K1?f(xn,yn)??K2?f(xn?h/2,yn?K1h/2) (2) ??K3?f(xn?h/2,yn?K2h/2)??K4?f(xn?h,yn?K3h)?和隐式公式组成,其计算公式如式(3)所示。
预测 yn?1?yn?(55fn?59fn?1?37fn?2?9fn?3)h/24
(3a)
求导 (3b)
校正 yn?1?yn?(9fn?1?19fn?5fn?1?fn?2)h/24
(3c)
求导 (3d)
将局部截断误差用预测值和校正值来表示,在预测和校正的公式中分别以它们各自的阶段误差来进行弥补,可期望的到精度更高的修正的
预测-校正公式为:
预测 pn?1?yn?(55fn?59fn?1?37fn?2?9fn?3)h/24 修正 mn?1?pn?1?(cn?pn)251/270 求导
校正 cn?1?yn?(9fn?1?19fn?5fn?1?fn?2)h/24 修正 yn?1?cn?1?(cn?1?pn?1)19/270 求导
由于开始时无预测值和校正值可以利用,故令p0=c0=0,以后按上面进行计算。此方法的优点是可以减少计算量;缺点是它不是自开始的,需要先知道前面的四个点的值,因此不能单独使用。另外,它也不便于改变步长。 程序设计:
本实验采用Matlab的M文件编写。其中待求的微分方程写成function的方式,如下
function yy=g(x,y); yy=-x*x-y*y;
写成如上形式即可,下面给出主程序。
经典四阶的R-K方法源程序
clear
%%%步长选取
h=0.1;
%%%初始条件,即x=0时,y=1。 y(1)=1;
%%%求解区间 a=0; b=2;
%%%迭代公式 for x=a:h:b-h;
k1=g(x,y((x-a)/h+1));%%,下同。 k2=g(x+h/2,y((x-a)/h+1)+h/2*k1); k3=g(x+h/2,y((x-a)/h+1)+h/2*k2); k4=g(x+h,y((x-a)/h+1)+h*k3);
y((x-a)/h+2)=y((x-a)/h+1)+h*(k1+2*k2+2*k3+k4)/6; end
四阶Adams预测-校正方法源程序
%%%步长选取 h=0.1;
%%%初始条件 y(1)=1;
%%%求解区间
a=0; b=2;
%%%应用RK迭代公式计算初始值y0,y1,y2,y3 for x=a:h:a+2*h;
k1=g(x,y((x-a)/h+1));
k2=g(x+h/2,y((x-a)/h+1)+h/2*k1); k3=g(x+h/2,y((x-a)/h+1)+h/2*k2); k4=g(x+h,y((x-a)/h+1)+h*k3);
y((x-a)/h+2)=y((x-a)/h+1)+h*(k1+2*k2+2*k3+k4)/6; end
%%%应用预测校正法求解 c(4)=0;%%%校正初值 p(4)=0;%%%预测初值
f(1)=g(a+0*h,y(1));,且将该值存在数组f中。 f(2)=g(a+1*h,y(2)); f(3)=g(a+2*h,y(3)); f(4)=g(a+3*h,y(4)); for n=4:(b-a)/h; %%%P预测
p(n+1)=y(n)+h/24*(55*f(n)-59*f(n-1)+37*f(n-2)-9*f(n-3));
相关推荐: