文档介绍:山 西 大 学 计 算 机 与 信 息 技 术 学 院
实 验 报 告
姓 名
学号
班级
08计科
课程名称
计算方法
实验日期
2010年12月6日
实验名称
实验六 数值积分
成绩
一、实验目的
利用复化梯形公式,复化辛普生公式和龙贝格数值积分公式计算的近似值。
二、实验方法
(1) 将[a,b]区间n等分,记分点为,并在每个小区间[]上应用梯形公式
(2)在每个小区间[]上应用辛普生公式
式中,为[]的中点,即。
(3)先用梯形公式计算,然后,将求积区间(a,b)逐次折半的方法,令区间长度。
计算,式中。
于是,得到辛普生公式。
科特斯求积公式
最后,得到龙贝格求积公式
利用上述各式计算,直到相邻两次的积分结果之差满足精度要求。
三、实验内容
利用复化梯形公式,复化辛普生公式和龙贝格数值积分公式计算
和
的近似值,要求误差为,将计算结果与精度值比较,并对计算结果进行分析。
四、实验程序
#include""
#include""
#include""
#include""
double f1(double x)
{
return x*exp(x);
}
double f2(double x)
{
return 4/(1+x*x);
}
//.............梯形公式..............................
double T(double a,double b,int n)
{
double x[20000];
double h=(b-a)/n;
for(int i=0;i<n;i++)
{
x[i]=a+i*h;
}
double m=0;
for(i=1;i<=n-1;i++)
{
m=m+f1(x[i]);
}
return h/2*(f1(a)+2*m+f1(b));
}
void teT()
{
int a=1,o=0;
double q=T(1,2,a);
double w=T(1,2,2*a);
while(fabs(w-q)>){
o++;
a=a*2;
q=T(1,2,a);
w=T(1,2,2*a);
}
printf("%d ",o);
printf("T=%",T(1,2,2*a));
}
double T1(double a,double b,int n)
{
double x[10000];
double h=(b-a)/n;
for(int i=0;i<n;i++){
x[i]=a+i*h;
}
double m=0;
for(i=