设计采用梯形法和辛普生法求定积分的程序.docx
- 文档编号:10940816
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:16
- 大小:353.13KB
设计采用梯形法和辛普生法求定积分的程序.docx
《设计采用梯形法和辛普生法求定积分的程序.docx》由会员分享,可在线阅读,更多相关《设计采用梯形法和辛普生法求定积分的程序.docx(16页珍藏版)》请在冰豆网上搜索。
设计采用梯形法和辛普生法求定积分的程序
河北工业大学计算机软件技术基础(VC)课程设计报告
学院机械工程学院班级工程力学101姓名万乐乐_学号100540____成绩______
一、题目:
设计采用梯形法和辛普生法求定积分的程序(17)
二、设计思路
1、总体设计
1)分析程序的功能
对梯形法和辛普生法计算在不同区间下的积分值,比较二者的精确度;并与真实积分值比较求其误差。
2)系统总体结构:
该程序有定义梯形法和辛普生法函数,f(x)函数,计算真实值的牛顿莱布尼茨函数和主函数。
①梯形法和辛普生法函数:
将积分转化为VC++语言,输入被积函数和积分区间等数据,能计算出对应的积分值。
②f(x)函数:
将所求的被积分的函数转化为VC++语言,被主函数调用。
③计算真实值的牛顿莱布尼茨函数:
计算所积函数在其被积区间下的真实积分值。
④主函数:
程序的主体,调用各个模块的运行。
2、各功能模块的设计:
①梯形法和辛普生法函数:
定义函数指针求积分,将数学表达式转化为VC++语言。
②f(x)函数:
通过写f1,f2函数的表达式,计算结果作为函数返回值。
③计算真实值的牛顿莱布尼茨函数:
通过写出f1,f2函数的原函数;用牛顿莱布尼茨公式计算其真实积分值作为函数的返回值。
④主函数:
调用梯形法和辛普生法函数,f(x)函数,计算真实值的牛顿莱布尼茨函数完成积分及误差的计算。
3、设计中的主要困难及解决方案
在这部分论述设计中遇到的主要困难及解决方案。
1)对函数指针不是很了解,查阅相关的资料学习其使用方法。
2)对于程序的循环使用及判断不易掌握,用到了while,for,if,break语句来解决。
4、你所设计的程序最终完成的功能
1)说明你编制的程序能完成的功能
用梯形法和辛普生法分别计算函数的积分,比较二者的精确度和与真实值之间的误差。
2)准备的测试数据及运行结果
当下限a=0上限b=1,n分别取2,10,100,1000,5000,20000,50000时用梯形法求f1,f2的积分及误差
当下限a=0上限b=1,n分别取2,10,100,1000,5000,20000,50000时用辛普生法求f1,f2的积分及误差
当下限a=0上限b=2,n分别取2,10,100,1000,5000,20000,50000时用梯形法求f1,f2的积分及误差
当下限a=0上限b=2,n分别取2,10,100,1000,5000,20000,50000时用辛普生法求f1,f2的积分及误差
三、程序清单
本程序包含main.cpp、f(x).cpp、txf.cpp、sinpson.cpp、zhengshi.cpp、head.h、6个文件。
1、main.cpp文件清单
#include
#include"head.h"
#include
voidmain()//主程序文件
{
doublea,b;
intn,c,d=0;
doublef_1,f_2,zs1,zs2;//f_1,f_2为算法计算的积分值;zs1为f1真实的积分值zs2为f2真实的积分值
cout<<"f1(x)=1+x*xf2(x)=1+x+x*x+x*x*x"< cout<<"以下为求f1,f2的对应积分区间的积分"< while (1)//循环语句 { if(d! =2)//重新输入新的数据 { cout<<"请输入下限a,上限b和n: "; cin>>a>>b>>n; } else//只改变n的值 { cout<<"请输入n: "; cin>>n; } cout<<"梯形法求积分请按: 1\n辛普法生求积分按: 2"< cin>>c; if(c! =1&&c! =2)//输入错误就重新输入 { for(;;) { cout<<"错误请重新选择: "; cin>>c; if(c==1||c==2)break; } } if(c==1)//选择梯形法计算 { f_1=integralt(a,b,n,f1); f_2=integralt(a,b,n,f2); zs1=realintegral(a,b,real1); zs2=realintegral(a,b,real2); cout<<"-------------------------------梯形法结果为------------------------------"< } if(c==2)//选择辛普生法计算 { f_1=integrals(a,b,n,f1); f_2=integrals(a,b,n,f2); zs1=realintegral(a,b,real1); zs2=realintegral(a,b,real2); cout<<"------------------------------辛普生法结果为-----------------------------"< } cout<<"n\ta\tb\tf1\tf1误差\t\tf2\tf2误差"< cout< cout<<"重新输入请按: 1\n只改变n的值请按: 2\n推出请按: 0"< cin>>d; if(d! =0&&d! =1&&d! =2)//当d输入错误时重新输入 {for(;;) { cout<<"错误请重新选择: "; cin>>d; if(d==1||d==2||d==3) break; } } if(d==0)//结束循环体 { cout<<"谢谢您的使用再见"< break; } } } 2、f(x).cpp文件清单 #include doublef1(doublex) {return1+x*x;} doublef2(doublex) {return1+x+x*x+x*x*x;} 3、txf.cpp文件清单 #include doubleintegralt(doublea,doubleb,intn,double(*f)(double)) { doubleh,jf=0; h=(b-a)/n; for(inti=1;i<=n;i++) { jf+=((*f)(a+i*h)+(*f)(a+(i-1)*h))*h/2.0; } returnjf; } 4、sinpson.cpp文件清单 #include doubleintegrals(doublea,doubleb,intn,double(*f)(double)) {doubleh,sj=0,sr=0; h=(b-a)/(2*n); for(inti=1;i<=2*n-1;i=i+2) sj+=(*f)(a+i*h); for(intj=2;j<=2*n-2;j+=2) sr+=(*f)(a+j*h); return((*f)(a)+(*f)(b)+4*sj+2*sr)*h/3; } 5、zhengshi.cpp文件清单 #include doubleintegrals(doublea,doubleb,intn,double(*f)(double)) {doubleh,sj=0,sr=0; h=(b-a)/(2*n); for(inti=1;i<=2*n-1;i=i+2) sj+=(*f)(a+i*h); for(intj=2;j<=2*n-2;j+=2) sr+=(*f)(a+j*h); return((*f)(a)+(*f)(b)+4*sj+2*sr)*h/3; } 6、head.h文件清单 #include doublef1(doublex);//声明f1函数 doublef2(doublex);//声明f2函数 doublereal1(doublex);//声明real1函数 doublereal2(doublex);//声明real2函数 doubleintegrals(doublea,doubleb,intn,double(*f)(double));//声明辛普生法函数 doubleintegralt(doublea,doubleb,intn,double(*f)(double));//声明梯形法函数 doublerealintegral(doublea,doubleb,double(*r)(double));//声明牛顿莱布尼茨计算积分函数 四、对该设计题目有何更完善的方案 1、对自己完成程序进行自我评价。 能够完成题目要求并且有一定的创新。 2、对课题提出更完善的方案 设计更加简单的用户界面,方便使用者的使用,在主函数的循环体中可以使用switch,case语句,这样看起来更加美观方便,输出界面可以采用列表的形式,这样能让使用者一目了然。 五、收获及心得体会 1、通过本次课程设计,自己在哪些方面的能力有所提高。 通过本次的课程设计,熟悉了函数指针和循环体的使用,加强了对多个函数调用的了解,提高软件系统分析能力和程序文档的建立、归纳总结的能力,现在我自己已经具备使用VC++开发应用软件和解决实际问题的能力。 2、收获和心得体会。 认识到了上学期学习VC++的重要性和实用性,让我深刻理解不论解决什么问题都要有逻辑的思维,认真的学习,大胆的创新;必要时查找相关资料;感谢老师的指导,让我受益匪浅。 通过自己独立完成这次课程设计,我在运用VC++解决实际问题的能力提高了 日期: 2011年9月7日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 采用 梯形 辛普生法求定 积分 程序