设计采用梯形法和辛普生法求定积分的程序Word文件下载.docx
- 文档编号:7044774
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:16
- 大小:353.13KB
设计采用梯形法和辛普生法求定积分的程序Word文件下载.docx
《设计采用梯形法和辛普生法求定积分的程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《设计采用梯形法和辛普生法求定积分的程序Word文件下载.docx(16页珍藏版)》请在冰点文库上搜索。
④主函数:
程序的主体,调用各个模块的运行。
2、各功能模块的设计:
定义函数指针求积分,将数学表达式转化为VC++语言。
通过写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<
iostream.h>
#include"
head.h"
math.h>
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"
endl;
//输出f1,f2函数
以下为求f1,f2的对应积分区间的积分"
while
(1)//循环语句
if(d!
=2)//重新输入新的数据
请输入下限a,上限b和n:
;
cin>
>
a>
b>
n;
}
else//只改变n的值
请输入n:
梯形法求积分请按:
1\n辛普法生求积分按:
2"
//两种算法选择
c;
if(c!
=1&
&
c!
=2)//输入错误就重新输入
for(;
)
错误请重新选择:
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);
-------------------------------梯形法结果为------------------------------"
if(c==2)//选择辛普生法计算
f_1=integrals(a,b,n,f1);
f_2=integrals(a,b,n,f2);
------------------------------辛普生法结果为-----------------------------"
n\ta\tb\tf1\tf1误差\t\tf2\tf2误差"
//输入的格式
n<
\t"
a<
b<
f_1<
fabs(f_1-zs1)<
f_2<
fabs(f_2-zs2)<
重新输入请按:
1\n只改变n的值请按:
2\n推出请按:
0"
d;
=0&
d!
=2)//当d输入错误时重新输入
{for(;
if(d==1||d==2||d==3)
break;
if(d==0)//结束循环体
谢谢您的使用再见"
2、f(x).cpp文件清单
//函数f1和f2
doublef1(doublex)
{return1+x*x;
doublef2(doublex)
{return1+x+x*x+x*x*x;
3、txf.cpp文件清单
//梯形法求积分算法
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文件清单
//辛普生法求积分算法
doubleintegrals(doublea,doubleb,intn,double(*f)(double))
{doubleh,sj=0,sr=0;
h=(b-a)/(2*n);
=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文件清单
6、head.h文件清单
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文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 采用 梯形 辛普生法求定 积分 程序