1、2)在某些求积函数中,用数值积分求解一些原函数 F(x) 不能用初等函数表示成有限形式 。3)熟练掌握用复化梯形法 ,复化辛甫生法和龙贝格法求解积分。4)编程实现复化梯形法 ,复化辛甫生以及龙贝格算法对积分的计算。二、课程设计内容(题目)数值积分收敛速度的比较分别按下述计算方案求积分 Ie x cosxdx 的近似值,并列表给出对分节点的积分值,从而比较其收敛速度。积分的准确值为:I12.070346316方案 I复化梯形法方案 II复化辛甫生法方案 III龙贝格算法三、问题的分析(含涉及的理论知识、算法等)1)复化梯形公式 :把积分区间 a,b等分为 m个小区间,令步长h= b a ,求积节
2、mxi a ih, i=0 ,,1,2 m,等距节点复化梯形公式为T mhm 1f ( xj ) f (b)( f (a) 2j 1先分段 ,通过避开直接算积分的繁琐步骤 ,直接计算函数值 ,再通过复化梯形公式求得积分的近似值 ,当 n 达到一定程度时 ,所得的结果就近似等于积分的值了 . 计算步骤 :算出 f(a),f(b) 以及 f(x k)相应的值 ,将所有值相加后乘以 h/2.即得到积分的值2)复化辛甫生公式 :将区间 a,b分成 n 等分 ,每等分称为一个子区间 ,其长度为h=(b-a)/n,分点为 xk=a+kh,k=0,1,2,.即 a=x0x1x2.xn=b记子区间 x k,x
3、 k+1 的中点为 xk+1/2,即 xk+1/2 =(xk+xk+1 )/2=xk+h/2(k=0,1,2,.,n-1)3复化辛甫生公式Snn 1 h ( f (xk ) 4 f (xk1 ) f ( xk 1)0 6n 1( f ( a) 4 f ( x1 )2 f (xk ) f (b)6k 1k 0和复化梯形公式的算法类似,依次算出函数的值 ,最后得出积分的近似值 ,当 n 较大时 ,结果近似等于积分的值 . 3)龙贝格算法1.算出 f(a)和 f(b),根据数值计算方法教材公式 5.26 计算 T1;2.将 a,b分半 ,算出 f(a+b)/2)后,根据公式 5.26 计算 T2;3
4、.再将区间分半 ,算出 f(a+(b-a)/4)及 f(a+3*(b-a)/4), 并根据公式 5.26 计算 T4.4.将区间再次分半 ,计算 T8.5.将区间再次分半 ,类似上述过程计算 T16.四、计算过程(含涉及编写的程序、运行环境、计算结果截屏等)流程图 1 复化梯形公式输入 a,b,nh=(a-b)/n k=1X=a+kh f(x)=exp(x)*cos(x)F(x)=F(x)+f(x)k+n=k?是否Tn=0.5h(f(a)+f(b)+2F(x)输出 Tn4图 1:复化梯形公式计算结果 1图 2:复化梯形公式计算结果 25辛甫生公式复化求积 :流程图 2 复化辛普森公式X1=a+
5、(k-1)h+X/2 f(x1)=exp(x1)*cos(x1)F(x)=F(x)+f(x) F1(x)=F1(x)+f(x1)是 k+KSn=(h/6)(f(a)+f(b)+2F(x)+4F1(x)输出 Sn图 3 复化辛普森公式计算结果图 4 龙贝格算法计算结果五、问题求解结果的分析与结论三种算法对分节点的积分值表7表 1 三种算法对分节点的积分值表复化梯形公式n=1-34.77851492-11.59283831n=2-17.38925746-11.98494282n=3-14.35266097-12.05157185n=4-13.33602148图 5 复化辛普森公式收敛8结果分析 :
6、通过计算发现 ,三种解法中 ,用复化辛甫生公式计算积分时收敛速度较快 ,复化梯形公式和龙贝格算法的收敛速度较慢 ,且后面两者的结果基本一致 ,但相对来说 , 龙贝格算法的计算量更少 ,更加方便 . 如果用折线图来描述的话 ,那么辛甫生算法的图像较为平整 ,变化幅度比较小 .六、课程设计的总结与体会(含每位同学承担的主要工作等)1)组员分别承担的任务张云华 :写报告 ,用复化辛甫生公式计算积分的编程 ,分别用三种算法计算节点的积分值并完成列表 .心得与体会 :在课程设计的同时不仅巩固了以前所学过的知识, 而且可以学到很多在书本上所没有学到过的知识, 特别是团队合作能力。 通过这次课程设计使我懂得
7、了理论与实际相结合是很重要的, 增强了我们处理问题的能力。 还有只有理论知识是远远不够的, 只有把所学的理论知识与实践相结合起来, 从理论中得出结论, 才能真正的掌握,从而提高自己的实际动手能力和独立思考的能力。刘贞宇 :用复化梯形公式和龙贝格算法计算积分的编程, ppt 的制作学习必须通过实践, 通过实践发现了自己的不足之处, 并及时纠正。 在求解过程中也遇到了各种各样的问题, 还有在编写程序是要注意代码, 要仔细,一个数字弄错了就可能导致运行时结果出错或不合实际。 因此我们应多课外实践来加深我们对课本的 理解。附录 :源代码复化梯形公式 :#include stdio.hmath.hvoi
8、d main()int k;double a,b,n,h,x;double f,f1,f2,T,F=0.0;printf( 请输入 a b n :);scanf(%lf%lf%lf,&a,&b,&n);h=(b-a)/n;for(k=1;kn;k+)x=a+k*h;f=exp(x)*cos(x);nf=%0.7f,f);F+=f;nF=%0.7f,F);if(a!=0.0)f1=exp(a)*cos(a);else(f1=1.0);nf1=%0.7f,f1);f2=exp(b)*cos(b);nf2=%0.7f,f2);T=0.5*h*(f1+2*F+f2);nT=%0.7f,T);复化辛普森
9、公式double a,b,n,h;double x,f,f1,f2,F1=0.0,F2=0.0,S=0.0;for(k=0;x=a+k*h+0.5*h;F1+=f;nF1=%0.7f,F1);f=0;F2+=f;nF2=%0.7f,F2);=0)f2=exp(b)cos(b);S=h/6.0*(f1+4*F1+2*F2+f2);nS=%0.7f,S);龙贝格算法 :#include math.h#define e 1e-5#define a 0 / 积分下限 a#define b 3.14159 /积分上限 b#define f(x) exp(x)*cos(x) / 被积函数 f(x)double t100100;int main()int n,k,i,m;double h,g,p;h=(double)(b-a)/2;t00=h*(f(a)+f(b);k=1;n=1;do /Romberg 算法g=0;for (i=1;i=n;i+)g+=f(a+(2*i-1)*h);tk0=(tk-10/2)+(h*g);for (m=1;me); /自定义误差限 e printf(%.8lf,t0m);return 0;12