36基于梯形法和辛普生求定积分.docx

上传人:b****5 文档编号:6058731 上传时间:2023-01-03 格式:DOCX 页数:11 大小:167.04KB
下载 相关 举报
36基于梯形法和辛普生求定积分.docx_第1页
第1页 / 共11页
36基于梯形法和辛普生求定积分.docx_第2页
第2页 / 共11页
36基于梯形法和辛普生求定积分.docx_第3页
第3页 / 共11页
36基于梯形法和辛普生求定积分.docx_第4页
第4页 / 共11页
36基于梯形法和辛普生求定积分.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

36基于梯形法和辛普生求定积分.docx

《36基于梯形法和辛普生求定积分.docx》由会员分享,可在线阅读,更多相关《36基于梯形法和辛普生求定积分.docx(11页珍藏版)》请在冰豆网上搜索。

36基于梯形法和辛普生求定积分.docx

36基于梯形法和辛普生求定积分

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

学院城市学院院班级电信C1136姓名王梦迪学号116108_成绩______

一、题目:

基于梯形法和辛普生法求定几分的程序

二、设计思路

1、总体设计

1)分析程序的功能

用梯形法和辛普生法求定积分,输入数据,通过调用函数和for循环,计算出他们的定积分。

在输出结果中比较,不同的数据,两种方法的精度不同,可通过结果的小数位数,确定哪种方法的精度高。

2)系统总体结构:

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

A、对函数进行宏定义,以及调用函数的原型声明。

B、编写程序,列出计算公式。

C、调用函数用梯形法求定积分:

通过函数的调用,利用梯形法的公式求定积分。

D、调用函数用辛普生法求定积分:

通过函数多次调用,用辛普生法的公式求定积分.

2、各功能模块的设计:

说明各功能模块的实现方法

1)对源程序的函数源进行声明及宏定义,便于后面的调用。

2)主函数部分:

编写好主函数程序,里面含有函数调用,成为主调函数;。

3)梯形法求定积分:

即被调函数部分,利用函数调用及for循环求累加和,计算出此时的函数值并将其反回到主函数中。

4)辛普生法求定积分:

调用函数求函数值,并利用for循环求累加和。

计算出函数的值并返回到主函数中。

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

1)困难1:

函数调用比较多,程序冗长,容易出现混乱。

解决方案:

函数的取名要尽量简单,取名之后按顺序排放。

2)困难2:

计算函数时,涉及到多个函数计算以及for循环求累加和。

解决方案:

清晰地定义多个函数,及宏定义,利用函数调用的知识,每计算一步,要用return返到主函数中。

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

1)向程序中输入a,b,n的值后,会分别用梯形法和辛普生法计算出相应的结果。

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

 

 

三、程序清单

#include

#include

#defineHIGH1(a,b,n)(b-a)/n//宏定义

doubleF1(doublex,doubley,intz);//函数原型说明

doubleF2(doublex,doubley,intz);

doublef1(doubleu);

doublef2(doublev);

doublesum1(doublec,doubled,inte);

doublesum2(doublep,doubleq,intr);

#defineHIGH2(a,b,n)(b-a)/(2*n)//宏定义

doubleF3(doublex,doubley,intz);//函数说明

doubleF4(doublex,doubley,intz);

doublef3(doubleu);

doublef4(doublev);

doublesum5(doublep,doubleq,intr);

doublesum6(doublep,doubleq,intr);

doublesum3(doublec,doubled,inte);

doublesum4(doublec,doubled,inte);

voidintegralts(doublex,doubley,intz,double(*f)(double,double,int));

voidintegralt(doublex,doubley,intz,double(*f)(double,double,int));

voidmain()//主函数

{

intn;

doublea,b;

cout<<"pleaseinputa,b,n=\n";//输出提示

cin>>a>>b>>n;

cout<<"a="<

cout<<"梯形法:

"<

cout<<"intesum1=";

integralt(a,b,n,F1);//应用函数指针调用函数

cout<<"intesum2=";

integralt(a,b,n,F2);//应用函数指针调用函数

cout<<"辛普生法:

"<

cout<<"intesum1=";

integralts(a,b,n,F3);//应用函数指针调用函数

cout<<"intesum2=";

integralts(a,b,n,F4);//应用函数指针调用函数

}

voidintegralt(doublex,doubley,intz,double(*f)(double,double,int))//利用梯形法球定积分

{

doubleff;

ff=(*f)(x,y,z);//用函数指针调用F1函数

cout<

}

doubleF1(doublex,doubley,intz)

{

doubleh,Y1;//定义局部变量

h=HIGH1(x,y,z);//调用宏定义

Y1=h/2*(f1(x)+f1(y)+2*sum1(x,y,z));//梯形法公式

returnY1;//返回梯形法得到的1+x*x的定积分的值

}

doubleF2(doublex,doubley,intz)

{

doubleh,Y2;//定义局部变量

h=HIGH1(x,y,z);//调用宏定义

Y2=h/2*(f2(x)+f2(y)+2*sum2(x,y,z));//梯形法公式,调用f2,sum2函数

returnY2;//返回梯形法得到的1+x+x*x+x*x*x的定积分的值

}

doublef1(doubleu)

{

doubley1;//定义变量

y1=u*u+1;

returny1;//返回值

}

doublef2(doublev)

{

doubley2;//定义变量

y2=1+v+v*v+v*v*v;

returny2;//返回值

}

doublesum1(doublec,doubled,inte)

{

doubleh=HIGH1(c,d,e);//调用宏定义

doubles1=0;//定义变量

for(inti=1;i<=e-1;i++)//for循环

{

doubleg=c+i*h;

s1+=f1(g);

}

returns1;//返回值

}

doublesum2(doublep,doubleq,intr)

{

doubleh=HIGH1(p,q,r);//引用宏定义

doubles2=0;//定义变量

for(inti=1;i<=r-1;i++)//for循环

{

doubleg=p+i*h;

s2+=f2(g);

}

returns2;//返回值

}

 

voidintegralts(doublex,doubley,intz,double(*f)(double,double,int))//辛普生法

{

doubleff;

ff=(*f)(x,y,z);//函数指针

cout<

}

doubleF3(doublex,doubley,intz)

{

doubleh,Y1;//定义变量

h=HIGH2(x,y,z);

Y1=h/3*(f3(x)+f3(y)+4*sum5(x,y,z)+2*sum6(x,y,z));//调用f3,sum5,sum6函数

returnY1;//返回值

}

doubleF4(doublex,doubley,intz)

{

doubleh,Y2;

h=HIGH2(x,y,z);

Y2=h/3*(f4(x)+f4(y)+4*sum3(x,y,z)+2*sum4(x,y,z));

returnY2;

}

doublef3(doubleu)

{

doubley1=1+u*u;

returny1;

}

doublef4(doublev)

{

doubley2=1+v+v*v+v*v*v;

returny2;

}

doublesum5(doublep,doubleq,intr)

{

doubleh=HIGH2(p,q,r);

doubles=0;

for(inti=1;i<=2*r-1;i+=2)//for循环

{

doubleg=p+i*h;

s+=f3(g);

}

returns;

}

doublesum6(doublep,doubleq,intr)

{

doubleh=HIGH2(p,q,r);

doubles=0;

for(inti=2;i<=2*r-2;i+=2)//for循环

{

doubleg=p+i*h;

s+=f3(g);

}

returns;

}

doublesum3(doublec,doubled,inte)

{

doubleh=HIGH2(c,d,e);

doubles=0;

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

{

doubleg=c+i*h;

s+=f4(g);

}

returns;

}

doublesum4(doublec,doubled,inte)

{

doubleh=HIGH2(c,d,e);

doubles=0;

for(inti=2;i<=2*e-2;i+=2)

{

doubleg=c+i*h;

s+=f4(g);

}

returns;

}

四、对该设计题目有何更完善的方案

1、对自己完成程序进行自我评价。

复习了函数和函数指针部分的内容,通过运用函数调用,for循环以及累加和运算,经过反复调试,将近一周的时间,终于完成了课程设计,感觉很充实,进一步熟悉了函数的运用,进步很大,同时课设过程中也是遇到很多困难,通过和同学的讨论和向老师的请教,终于完成了课程设计。

 

2、对课题提出更完善的方案

改程序,使一次运行中,可以输入多组数据,并进行计算,在输出结果中可以直观的比较出梯形法与辛普生法求定积分的精度问题。

 

五、收获及心得体会

1、通过本次课程设计,自己在哪些方面的能力有所提高。

熟悉了函数和函数指针的知识,以及for循环和函数累加和的应用。

提高了自学能力,通过不断地调试程序,不断的改进,在此过程中,,磨砺了自己的毅力,最终程序成功运行,更增强了今后在学习中的自信。

 

2、收获和心得体会。

1)首先要有耐心;

2)增强自学能力,不会就问,或查资料;

3)锻炼自己的意志,要能坚持,不放弃,要自信。

 

日期:

2012年06月28日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1