设计采用梯形法和辛普生法求定积分的程序.docx

上传人:b****4 文档编号:4932521 上传时间:2023-05-07 格式:DOCX 页数:16 大小:353.13KB
下载 相关 举报
设计采用梯形法和辛普生法求定积分的程序.docx_第1页
第1页 / 共16页
设计采用梯形法和辛普生法求定积分的程序.docx_第2页
第2页 / 共16页
设计采用梯形法和辛普生法求定积分的程序.docx_第3页
第3页 / 共16页
设计采用梯形法和辛普生法求定积分的程序.docx_第4页
第4页 / 共16页
设计采用梯形法和辛普生法求定积分的程序.docx_第5页
第5页 / 共16页
设计采用梯形法和辛普生法求定积分的程序.docx_第6页
第6页 / 共16页
设计采用梯形法和辛普生法求定积分的程序.docx_第7页
第7页 / 共16页
设计采用梯形法和辛普生法求定积分的程序.docx_第8页
第8页 / 共16页
设计采用梯形法和辛普生法求定积分的程序.docx_第9页
第9页 / 共16页
设计采用梯形法和辛普生法求定积分的程序.docx_第10页
第10页 / 共16页
设计采用梯形法和辛普生法求定积分的程序.docx_第11页
第11页 / 共16页
设计采用梯形法和辛普生法求定积分的程序.docx_第12页
第12页 / 共16页
设计采用梯形法和辛普生法求定积分的程序.docx_第13页
第13页 / 共16页
设计采用梯形法和辛普生法求定积分的程序.docx_第14页
第14页 / 共16页
设计采用梯形法和辛普生法求定积分的程序.docx_第15页
第15页 / 共16页
设计采用梯形法和辛普生法求定积分的程序.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

设计采用梯形法和辛普生法求定积分的程序.docx

《设计采用梯形法和辛普生法求定积分的程序.docx》由会员分享,可在线阅读,更多相关《设计采用梯形法和辛普生法求定积分的程序.docx(16页珍藏版)》请在冰点文库上搜索。

设计采用梯形法和辛普生法求定积分的程序.docx

设计采用梯形法和辛普生法求定积分的程序

河北工业大学计算机软件技术基础(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//函数f1和f2

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模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2