您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 合肥工业大学计算方法复化梯形公式实验
《计算方法》实验报告学号姓名班级实验项目名称实验二数值积分一、实验名称实验二数值积分二、实验目的:(1)熟悉复化梯形方法、复化Simpson方法、梯形递推算法、龙贝格算法;(2)能编程实现复化梯形方法、复化Simpson方法、梯形递推算法、龙贝格算法;(3)理解并掌握自适应算法和收敛加速算法的基本思想;(4)分析实验结果体会各种方法的精确度,建立计算机求解定积分问题的感性认识三、实验内容及要求(1)设计复化梯形公式求积算法,编制并调试相应的函数子程序(2)设计复化辛浦生求积算法,编制并调试相应的函数子程序(3)用龙贝格算法计算dxxx10sin输入:积分区间,误差限输出:序列Tn,Sn,Cn,Rn及积分结果(参考书本P81的表2-5)取n=2,4,8,16,精确解为0.9460831四、实验原理及算法描述在许多实际问题中,常常需要计算定积分dxxfba)(的值。根据微积分学基本定理,若被积函数f(x)在区间[a,b]上连续,只要能找到f(x)的一个原函数F(x),便可利用牛顿-莱布尼兹公式baaFbFxf)()()(求得积分值。但是在实际使用中,往往遇到如下困难,而不能使用牛顿-莱布尼兹公式。(1)找不到用初等函数表示的原函数(2)虽然找到了原函数,但因表达式过于复杂而不便计算(3)f(x)是由测量或计算得到的表格函数由于以上种种困难,有必要研究积分的数值计算问题。计算机科学与工程学院2利用插值多项式)()(xfxPn则积分dxxfba)(转化为dxxPban)(,显然易算。dxxPban)(称为插值型求积公式。最简单的插值型求积公式是梯形公式和Simpson公式,。当求积结点提供较多,可以分段使用少结点的梯形公式和Simpson公式,并称为复化梯形公式、复化Simpson公式。如步长未知,可以通过误差限的控制用区间逐次分半的策略自动选取步长的方法称自适应算法。梯形递推公式给出了区间分半前后的递推关系。由梯形递推公式求得梯形序列,相邻序列值作线性组合得Simpson序列,Simpson序列作线性组合得柯特斯序列,柯特斯序列作线性组合的龙贝格序列。若|R2-R1|,则输出R2;否则…依此类推。如此加工数据的过程叫龙贝格算法,如下图所示:复化梯形公式)]()(2)([21110nnkknxfxfxfhT复化Simpson公式])(4)()(2)([61021110nkknknknxfxfxfxfhS梯形递推公式10212)(22nkknnxfhTT加权平均公式:nnnSTT1442nnnCSS144222nnnRCC144323龙贝格算法大大加快了误差收敛的速度,由梯形序列O(h2)提高到龙贝格序列的O(h8)五、程序代码及实验结果1.主程序intmain(){//coutlongbeige(0,1,0.0000001);cout请输入你的区间和误差限度:endl;doublex,y,z;cinxyz;cout根据龙贝格算法求出的精确值为:longbeige(x,y,z)endl;coutKTSCRendl;cout0tixing(0,1,1)endl;cout1tixing(0,1,2)xingbusheng(0,1,1)endl;cout2tixing(0,1,4)xingbusheng(0,1,2)((double(16/15))*xingbusheng(0,1,2))-(double(1/15))*xingbusheng(0,1,1)endl;cout3tixing(0,1,8)xingbusheng(0,1,4)((double(16/15))*xingbusheng(0,1,4))-(double(1/15))*xingbusheng(0,1,2)longbeige(0,1,0.000000001)endl;cout4tixing(0,1,16)xingbusheng(0,1,8)((double(16/15))*xingbusheng(0,1,4))-(double(1/15))*xingbusheng(0,1,2)longbeige(0,1,计算机科学与工程学院30.00000001)endl;;couttheresult4islongbeige(0,1,0.00000001);return0;}2.复化梯形公式子程序:doubletixing(doublea,doubleb,intn){doublefa=f(a);doublefb=f(b);doubleh=(b-a)/n;doublefxk=0.0;for(intk=1;k=n-1;k++){doublexk=a+k*h;fxk=f(xk)+fxk;}doubleres=(h/2.0)*(fa+2.0*fxk+fb);returnres;}3.复化辛浦生公式子程序:doublexingbusheng(doublea,doubleb,intn){doubleh=(b-a)/n;doublefa=f(a);doublefb=f(b);//doubles=fb-fa;doublex=a;doublefxk12=0.0;doublefxk=0.0;/*for(intk=1;k=n;k++){x=x+h/(2.0);doublefx=f(x);s=s+4.0*f(x);x=x+h/(2.0);s=s+2.0*f(x);}s=(h/6.0)*s;returns;*/计算机科学与工程学院4for(intk=0;k=n-1;k++){doublexk1=a+k*h;x=xk1+h/2.0;fxk12=fxk12+f(x);}for(intk=1;k=n-1;k++){doublexk=a+k*h;fxk=fxk+f(xk);}doubles=(h/6)*(fa+4*fxk12+2*fxk+fb);returns;}4.龙贝格公式子程序:doublelongbeige(doublea,doubleb,doublewuchaxian){doubleh=b-a;doubleT1=(h/2.0)*(f(a)+f(b));intk=1;doubleS,x,T2,S2,S1=0,C1=0,C2,R1=0,R2;doubleTck[100],Sck[100],Cck[100],Rck[100];loop1:S=0;x=a+h/2.0;while(xb){S=S+f(x);x=x+h;}T2=(T1/2.0)+(h/2)*S;//第一个S2=T2+(1/3)*(T2-T1);if(k==1){Tck[k]=T2;k++;h=h/2;T1=T2;计算机科学与工程学院5S1=S2;gotoloop1;}C2=S2+(1/15)*(S2-S1);if(k==2){C1=C2;Tck[k]=T2;k++;h=h/2;T1=T2;S1=S2;gotoloop1;}R2=C2+(1/63)*(C2-C1);if(k==3){Tck[k]=T2;R1=R2;C1=C2;k++;h=h/2;T1=T2;S1=S2;gotoloop1;}if(fabs(R2-R1)=wuchaxian){R1=R2;C1=C2;k++;h=h/2;T1=T2;S1=S2;gotoloop1;}else{returnR2;}}计算机科学与工程学院6实验结果:图1六、实验总结1.梯形公式的收敛速度太慢,所以我们才会选择之后的几种公式加快收敛速度。2.通过实验可以看出,龙贝格算法大大加快了误差收敛的速度,由梯形序列O(h2)提高到龙贝格序列的O(h8)3.在编程的过程中可以切身体验到龙贝格算法是基于前几种算法的实现才能实现的。从而可以知道其实现可以运用前几种算法。五、教师评语(或成绩)教师签字:
本文标题:合肥工业大学计算方法复化梯形公式实验
链接地址:https://www.777doc.com/doc-7212135 .html