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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

河北工业大学计算机软件技术基础(VC)课程设计报告

学院信息工程学院院班级通信101 姓名崔羽飞学号 102117

成绩 __ ____

一、题目:

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

二、设计思路

1、总体设计

1)分析程序的功能

本题目的功能是对梯形法和辛普森法,在不同区间数下计算所得的定积分的值,进行精度比较。

2)系统总体结构:

设计程序的组成模块,简述各模块功能。

该程序共分为以下几个模块

模块一:各函数原型的声明。

模块二:主函数。

模块三:各函数的定义。

包括两个数学函数y1=1+x*x、y2=1+x+x*x+x*x*x的定义和两个函数指针double integralt(double ,double ,int ,double(*f)(double))

double integrals(double ,double ,int ,double(*f)(double))

的定义。

2、各功能模块的设计:说明各功能模块的实现方法

模块一:对各种函数进行声明。

模块二:求梯形法和辛普森法,在不同区间数下计算所得的定积分的值。

模块三:将各函数写出来。

3、设计中的主要困难及解决方案

在这部分论述设计中遇到的主要困难及解决方案。

1)困难1:函数指针的应用。解决方案:仔细阅读课本,以及与同学之间的讨论,和向老师求助。

2)困难2:将程序分成不同的.cpp文件。解决方案:与同学讨论。

4、你所设计的程序最终完成的功能

1)说明你编制的程序能完成的功能

在数学上求一个函数与x轴在一定范围内所围的面积即求定积分,对梯形法和辛普森法求定积分的比较。

2)准备的测试数据及运行结果

三、程序清单

本程序共六个文件,其中包含main.cpp,f1.cpp,f2.cpp,integrals.cpp, integralt.cpp,shengming.h

1.main.cpp

#include

#include "shengming.h"

void main()

{

double a,b,intesum1,intesum2,intesum3,intesum4;//对求定积分的定义.

cout<<"please shangxian xiaxian a,b:";//输入上限和下限.

cin>>a>>b;

int n[7]={2,10,100,1000,5000,10000,50000};//n的不同取值.

//下面是对第一行不同n的值的输出.

cout<<" n值 ";

for(int i=0;i<7;i++)

cout<<" "<

cout<

//下面是对n取不同值时,用梯形法对f1求定积分.

cout<<"intesum1";

for(i=0;i<7;i++)

{

intesum1=integralt(a,b,n[i],f1);

cout<<" "<

}

cout<

//下面是对n取不同值时,用梯形法对f2求定积分.

cout<<"intesum2";

for(i=0;i<7;i++)

{

intesum2=integralt(a,b,n[i],f2);

cout<<" "<

}

cout<

//下面是对n取不同值时,用用辛普森法对f1求定积分.

cout<<"intesum3";

for(i=0;i<7;i++)

{

intesum3=integrals(a,b,n[i],f1);

cout<<" "<

}

cout<

//下面是对n取不同值时,用用辛普森法对f2求定积分.

cout<<"intesum4";

for(i=0;i<7;i++)

{

intesum4=integrals(a,b,n[i],f2);

cout<<" "<

}

cout<

}

2.f1.cpp

double f1(double x) //定义函数y1=1+x*x.

{

double y1;

y1=1+x*x;

return y1;

}

3.f2cpp

double f2(double x) //定义函数y2=1+x+x*x+x*x*x.

{

double y2;

y2=1+x+x*x+x*x*x;

return y2;

}

4.integrals.cpp

double integrals(double a,double b,int n,double(*f)(double))//定义用辛普森法求定积分.

{

int i;

double sum1=0,sum2=0,intesum,h;

h=(b-a)/2/n;

for(i=1;i<=2*n-1;i+=2)

sum1+=(*f)(a+i*h);

for(i=2;i<=2*n-2;i+=2)

sum2+=(*f)(a+i*h);

intesum=h*((*f)(a)+(*f)(b)+4*sum1+2*sum2)/3;

return intesum;

}

5.integralt.cpp

double integralt(double a,double b,int n,double(*f)(double))//定义用梯形法求定积分.

{

int i;

double sum=0,intesum,h;

h=(b-a)/n;

for(i=1;i<=n-1;i++)

sum+=(*f)(a+i*h);

intesum=h*((*f)(a)+2*sum+(*f)(b))/2;

return intesum;

}

6.shengming.h

double integralt(double ,double ,int ,double(*f)(double));//用梯形法求定积分的声明.

相关文档
最新文档