实验2复化数值积分法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西华数学与计算机学院上机实践报告
课程名称:计算方法C年级:2011级上机实践成绩:
指导教师:严常龙姓名:
上机实践名称:复化梯形积分与龙贝格积分方法学号:上机实践日期:2012.12.08上机实践编号:2上机实践时间:
一、目的
1.通过本实验加深对复化数值积分及龙贝格积分方法构造过程的理解;
2.能对复化梯形积分和龙贝格数值积分方法提出正确的算法描述编程实现。
二、内容与设计思想
自选积分问题,编制复化梯形积分和龙贝格积分的程序完成积分近似值的计算(从课件或教材习题中选题)
例如:利用龙贝格积分算法重新计算
1
2
3
4
x
dx
x
+
⎰的值,使误差不超过0.5*10^(-6)
三、使用环境
操作系统:Windows 7
软件环境:VC++ 6.0
四、核心代码及调试过程
#include
#include
#include
#define MAXD 50
#define EPS 0.0000005
double f(double x)
{
return(3*x/(4+x*x));
}
void FHTX(double a,double b)
{//复化梯形积分
int i,n=1;
double h,t1,t2,p,x,fsum; //fsum为累加的新结点值,x为函数自变量
h=b-a;
t1=(f(a)+f(b))/2;
p=EPS+1.0;
while(p>3*EPS)
{
fsum=0.0;
for(i=1;i<=(int)pow(2,n-1);i++)
{
x=a+(i-0.5)*h;
fsum=fsum+f(x);
}
t2=(t1+h*fsum)/2.0;
cout< p=fabs(t2-t1); t1=t2;n=n+1;h=h/2; } cout< } void Romberg(double a,double b) {//龙格积分法 int k=1,i,j; double t[MAXD][4]={0},p,h,temp; h=b-a; t[0][0]=h*(f(a)+f(b))/2.0; p=EPS+1.0; while((k { temp=0.0; for(i=1;i<=(int)(pow(2,k-1));i++) temp=temp+f(a+(i-0.5)*h); t[k][0]=(t[k-1][0]+h*temp)/2.0; for(j=1;j<=k;j++) { if(j>3)break; t[k][j]=(pow(4,j)*t[k][j-1]-t[k-1][j-1])/(pow(4,j)-1); } if(k>4) p=fabs(t[k][3]-t[k-1][3]); k=k+1;h=h/2.0; } if(k>MAXD) cout<<"方法失败!\n"; else { cout<<"\t"<<"T"< for(i=0;i<=k;i++) { cout< for(j=0;j<4;j++) if(i>=j) cout< cout< } } } void main() { double a=0.0,b=1.0; cout<<"复化梯形积分为:"< FHTX(a,b); cout<<"龙贝格积分为:"< Romberg(a,b); } 五、总结 掌握复化梯形和龙贝格积分。在今后还要继续努力。 六、附录 见*.cpp