MATLAB复化梯形法与龙贝格法计算定积分
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
姓名:樊元君学号:2012200902 日期:2012.11.06
1.实验目的:
掌握复化梯形法与龙贝格法计算定积分。
2.实验内容:
分别写出变步长梯形法与龙贝格法计算定积分的算法,编写程序上机调试出结果,要求所编程序适用于任何类型的定积分,即能解决这一类问题,而不是某一个问题。实验中以下列数据验证程序的正确
性。求。
3.程序流程图:
●变步长梯形法流程图:
●龙贝格法流程图:
4.源程序:
●变步长梯形法:
function [ y ] =BTX(a,b,e) a=input('a=');
b=input('b=');
e=input('e=');
h=(b-a);
t1=((f(a)+f(b))*h)/2;
t2=0; %准备初值%
while abs(t2-t1)>e %while语句控制计算精度以及控制计算时长if t2~=0 %按照变步长梯形法
h=h/2; %递推公式求二分后积分值
t1=t2;
end
s=0;
x=a+h/2;
while x
s=s+f(x);
x=x+h;
end
t2=(t1/2)+(h/2)*s;
end
disp('插值结果=');disp(t2);
end
function [ y ] =f(x) %被积分函数%
if x~=0
y=sin(x)/x;
else
y=1;
end
end
●龙贝格法程序:
function [ y ] =LB(a,b,e)
format long
a=input('a=');
b=input('b=');
e=input('e=');
h=(b-a);
t1=((f(a)+f(b))*h)/2;
k=1;s=0;s1=0;s2=0;c2=0;c1=0;r1=0;r2=0; %准备初值% while k==1||k==2||k==3||k>=4
s=0;x=a+h/2;
while x
s=s+f(x);x=x+h;
end
t2=(t1/2)+(h/2)*s;
s2=t2+(t2-t1)/3;
if k==1
k=k+1;h=h/2;t1=t2;s1=s2;
continue
end
c2=s2+(s2-s1)/15;
if k==2
c1=c2; k=k+1;h=h/2;t1=t2;s1=s2;
continue
end
r2=c2+(c2-c1)/63;
if k==3
r1=r2;c1=c2; k=k+1;h=h/2;t1=t2;s1=s2; continue
end
if abs(r2-r1) break else r1=r2;c1=c2; k=k+1;h=h/2;t1=t2;s1=s2; continue end end disp('插值结果=');disp(r2); end function [ y ] =f(x) %被积分函数% if x~=0 y=sin(x)/x; else y=1; end end 5.运行结果: 6.实验小结: (1)刚开始没注意到积分中,被积函数在x=0点函数值为1,而编程中函数定义f(x)=sin(x)/x,当x=0时,程序只能得到结果0/0=NaN(无穷大),导致后面积分计算算法完全失去意义,后来采取if和else以特殊情况对待x=0,才解决问题; (2)龙贝格法是对变步长梯形法的升华,在对复合梯形法理解透彻,并且编程合理,再去解决龙贝格法编程,容易很多; (3)充分理解两个算法的内涵和推理过程,对于编程正确性有很大帮助,刚开始由于对变步长梯形法理解不到位,一处循环采用if语句(本应采用while)导致计算结果不受约束条件约束的错误; (4)由于龙贝格法至少要算4个T值后才有R值,但由于龙贝格法收敛快,导致第一个R值就已经达到相当位数的有效数字,而导 ε≤约束条件根本起不到致检验数据中的0.00001 应有的精度约束效果。