龙格库塔方法的Miline-Hamming预测-校正算法实验报告知识讲解

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

龙格库塔方法的

M i l i n e-H a m m i n g预测-校正算法实验报告

2011-2012学年第2学期实验报告

实验名称:微分方程数值解实验学院:******

专业:**************

班级:**********

班内序号:**

学号:********

姓名:******

任课教师:******

北京邮电大学

时间:****年**月**日

实验目标

用多环节Miline-Hamming 预测-校正算法求下列方程的解

{y‘=y −2x

y ,y (0)=1, 0≤x ≤4 其中解析解为 y (x )=√1+2x

实验原理

计算龙格库塔显示公式计算预测值,然后用隐式公式进行校正。Miline-Hamming 预测-校正公式为

{

p n+1=u n−3+4

3

h(2f n −f n−1+f n−2)

m n+1=p n+1+112

121(c n

−p n )

c n+1=18

(9u n −u n−2)+38h[f (t n+1,m n+1)+2f n −f n−1]

u n+1=c n+1−9(c n+1

−p n+1)

其对应的算法流程为

1) 输入a ,b ,f(t,u),N ,u 0 2) 置h=(b-a)/N ,t 0=a ,n=1 3) 计算f n-1=f(t n-1,u n-1)

K 1=hf n-1

K 2=hf(t n-1+h/2, u n-1+K 1/2) K 3=hf(t n-1+h/2, u n-1+K 2/2) K 4=hf(t n-1+h, u n-1+K 3)

u n = u n-1+1/6(K 1 +2K 2 +2K 3 +K 4) t n =a+nh

4) 输出(t n ,u n )

5) 若n<3,置n+1→n ,返回3;

否则,置n+1→n ,0→p 0,0→c 0,转6.

6) 计算

f 3=f(t 3,u 3) t= t 3+h

p=u 0+4/3(2 f 3 –f 2 +2f 1) m=p+112/121(c 0-p 0)

c=1/8(9u 3- u 1)+3/8h[f(t,m)+ 2 f 3 –f 2] u=c-9/121(c-p)

输出(t,u)

7)如n

否则停止。

实验过程

我们不妨设步长h=0.2,编程实现如下:

clear

clf

clc

%直接求解微分方程

y=dsolve('Dy=y-2*t/y','y(0)=1','t');

%Miline-Hamming预测-校正法

h=0.2;

t=0:h:4;

n=length(t);

u=zeros(1,n);

u(1)=1;

zbu(1,1)=t(1);

zbu(2,1)=u(1);

f=zeros(1,n);

p=zeros(1,n);

c=zeros(1,n);

m=zeros(1,n);

for i=2:n

if i-1<=3

f(i-1)=u(i-1)-2*t(i-1)/u(i-1);

k1=h*f(i-1);

k2=h*((u(i-1)+k1/2)-2*(t(i-1)+h/2)/(u(i-1)+k1/2)); k3=h*((u(i-1)+k2/2)-2*(t(i-1)+h/2)/(u(i-1)+k2/2)); k4=h*((u(i-1)+k3)-2*(t(i-1)+h)/(u(i-1)+k3));

u(i)=u(i-1)+1/6*(k1+2*k2+2*k3+k4);

zbu(1,i)=t(i);

zbu(2,i)=u(i);

else

f(i-1)=u(i-1)-2*t(i-1)/u(i-1);

p(i)=u(i-4)+4/3*h*(2*f(i-1)-f(i-2)+2*f(i-3));

m(i)=p(i)+112/121*(c(i-1)-p(i-1));

c(i)=1/8*(9*u(i-1)-u(i-3))+3/8*h*(m(i)-2*t(i)/m(i)+2*f(i-1)-f(i-2));

u(i)=c(i)-9/121*(c(i)-p(i));

zbu(1,i)=t(i);

zbu(2,i)=u(i);

end

end

zbu

%作图

plot(t,u,'r*','markersize',10)

hold on,

ezplot(y,[0,4])

hold on,

title('Miline-HammingÔ¤²â-УÕýËã·¨')

grid on

legend('Miline-HammingÔ¤²â-УÕýËã·¨','½âÎö½â')

%解真值

h=0.2;

t=0:h:4;

n=length(t);

for i=1:n

y(i)=(1+2*t(i))^(1/2);

zby(1,i)=t(i);

zby(2,i)=y(i);

end

zby

我们可以得到计算后的结果图像如图1所示

相关文档
最新文档