计算方法实验六数值积分.docx
- 文档编号:5888358
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:11
- 大小:109.96KB
计算方法实验六数值积分.docx
《计算方法实验六数值积分.docx》由会员分享,可在线阅读,更多相关《计算方法实验六数值积分.docx(11页珍藏版)》请在冰豆网上搜索。
计算方法实验六数值积分
山西大学计算机与信息技术学院
实验报告
姓名
学号
专业班级
课程名称
计算方法
实验日期
成绩
指导老师
批改日期
实验名称
实验六数值积分
一.实验目的:
利用复化梯形公式、复化辛普生公式和龙贝格数值积分公式计算
的近似值。
二.实验方法:
(1)将[a,b]区间n等分,记分点为
,并在每个小区间[
]上应用梯形公式
(2)在每个小区间[
]上,用辛普生公式
式中
为[
]的中点,即
(3)先用梯形公式计算
,然后,将求积区间(a,b)逐次折半的方法,令区间长度
计算
,式中
。
于是,得到辛普生公式
。
柯斯特求积公式
。
最后,得龙贝格求积公式
。
利用上述各公式计算,直到相邻两次的积分结果之差满足精度要求。
三.实验内容
利用复化梯形公式、复化辛普生公式和龙贝格数值积分公式计算
的近似值,要求误差为
,将计算结果与精确值比较,并对计算结果进行分析(计算量、误差)
四.实验程序:
复合梯形公式:
#include
#include
#defineesp0.5e-7
#definea1
#defineb2
#definec0
#defined1
#defineE2.71828182845904523536
#definef1(x)(x*pow(E,x))
#definef2(x)(4/(1+(x*x)))
voidfun1()
{
inti,n,k=0;
doubleh,q,t,g;
n=1;
h=(double)(b-a)/2;
t=h*(f1(a)+f1(b));
do
{
k++;
q=t;
g=0;
for(i=1;i<=n;i++)
g+=f1((a+(2*i-1)*h));
t=(q/2)+(h*g);
n*=2;
h/=2;
}
while(fabs(t-q)>esp);
printf("函数1分了%d次:
\n",k);
printf("积分结果为:
");
printf("%12.8lf\n",t);
}
voidfun2()
{
inti,n,k=0;
doubleh,q,t,g;
n=1;
h=(double)(d-c)/2;
t=h*(f2(c)+f2(d));
do
{
k++;
q=t;
g=0;
for(i=1;i<=n;i++)
g+=f2((c+(2*i-1)*h));
t=(q/2)+(h*g);
n*=2;
h/=2;
}
while(fabs(t-q)>esp);
printf("函数2分了%d次:
\n",k);
printf("积分结果为:
");
printf("%12.8lf\n",t);
}
intmain()
{
printf("//***********复合梯形公式***********//\n");
fun1();
fun2();
return0;
}
复合辛普生公式代码:
#include
#include
#defineesp0.5e-7
#definea1
#defineb2
#definec0
#defined1
#defineE2.71828182845904523536
#definef1(x)(x*pow(E,x))
#definef2(x)(4/(1+(x*x)))
voidfun1()
{
inti,n,k=0;
doublef1,f2,f3,h,s0,s;
f1=f1(a)+f1(b);
f2=f1(((double)(b+a)/2));
f3=0;
s=((double)(b-a)/6)*(f1+4*f2);
n=2;
h=(double)(b-a)/4;
do
{
k++;
f2+=f3;
s0=s;
f3=0;
for(i=1;i<=n;i++)
f3+=f1((a+(2*i-1)*h));
s=(h/3)*(f1+2*f2+4*f3);
n*=2;
h/=2;
}
while(fabs(s-s0)>esp);
printf("函数1分了%d次数:
\n",k);
printf("积分结果为:
");
printf("%12.8lf\n",s);
}
voidfun2()
{
inti,n,k=0;
doublef1,f2,f3,h,s0,s;
f1=f2(d)+f2(c);
f2=f2(((double)(d+c)/2));
f3=0;
s=((double)(d-c)/6)*(f1+4*f2);
n=2;
h=(double)(d-c)/4;
do
{
k++;
f2+=f3;
s0=s;
f3=0;
for(i=1;i<=n;i++)
f3+=f2((c+(2*i-1)*h));
s=(h/3)*(f1+2*f2+4*f3);
n*=2;
h/=2;
}
while(fabs(s-s0)>esp);
printf("函数1分了%d次数:
\n",k);
printf("积分结果为:
");
printf("%12.8lf\n",s);
}
intmain()
{
printf("//***********复合辛普生公式***********//\n");
fun1();
fun2();
return0;
}
龙贝格数值积分公式代码:
#include
#include
#defineesp0.5e-7
#definea1
#defineb2
#definec0
#defined1
#defineE2.71828182845904523536
#definef1(x)(x*pow(E,x))
#definef2(x)(4/(1+(x*x)))
doublet1[100][100];
doublet2[100][100];
voidfun1()
{
intn,k,i,m,w=0;
doubleh,g,p;
h=(double)(b-a)/2;
t1[0][0]=h*(f1(a)+f1(b));
k=1;
n=1;
do
{
w++;
g=0;
for(i=1;i<=n;i++)
g+=f1((a+((2*i-1)*h)));
t1[k][0]=(t1[k-1][0]/2)+(h*g);
for(m=1;m<=k;m++)
{
p=pow(4,(double)(m));
t1[k-m][m]=(p*t1[k-m+1][m-1]-t1[k-m][m-1])/(p-1);
}
m-=1;
h/=2;
n*=2;
k+=1;
}
while(fabs(t1[0][m]-t1[0][m-1])>esp);
printf("函数1分了%d次:
\n",w);
printf("积分结果为:
\n");
printf("%12.8lf\n",t1[0][m]);
}
voidfun2()
{
intn,k,i,m,w=0;
doubleh,g,p;
h=(double)(d-c)/2;
t2[0][0]=h*(f2(c)+f2(d));
k=1;
n=1;
do
{
w++;
g=0;
for(i=1;i<=n;i++)
g+=f2((c+((2*i-1)*h)));
t2[k][0]=(t2[k-1][0]/2)+(h*g);
for(m=1;m<=k;m++)
{
p=pow(4,(double)(m));
t2[k-m][m]=(p*t2[k-m+1][m-1]-t2[k-m][m-1])/(p-1);
}
m-=1;
h/=2;
n*=2;
k+=1;
}
while(fabs(t2[0][m]-t2[0][m-1])>esp);
printf("函数2分了%d次:
\n",w);
printf("积分结果为:
\n");
printf("%12.8lf\n",t2[0][m]);
}
intmain()
{
printf("//***********龙贝格数值积分公式***********//\n");
fun1();
fun2();
return0;
}
五、结果分析
复合梯形公式结果截图:
复合辛普生公式结果截图:
龙贝格数值积分公式结果截图:
六、结果分析
1在求积分时,常把积分区间分成若干小区间,在每个小区间行采用次数不高的求积公式,如梯形、辛普生然后再把它们加起来,得到整个区间上的求积公式,这就是复合求积公式的基本思想。
2龙贝格采用了变步长的求解公式,可以根据精度的要求,在计算过程中适当调整步长,使计算结果逐步逼近精确值,但是近似值序列收敛于积分精确值的速度较慢。
3复化梯形公式、复化辛普生公式和龙贝格数值积分公式都有着较高的精度,其中龙贝格数值积分公式精度基本上是最高的。
而在对积分区间作同样的分割的条件下,复合辛普生求积公式比复合梯形公式的计算精度高。
4在计算速度方面,从表中可看出,复化梯形公式的等分数要比其它两个大得多,且从计算结果上很容易知道复化辛普生公式也比复化梯形公式的收敛速度快得多。
而龙贝格数值积分公式的计算量是最少的。
由上可知,龙贝格数值积分公式在精度和计算速度上都是最高的。
而使用龙贝格公式通过对梯形值进行外推加速的处理,能使精度快速提高。
教师
评语
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算方法 实验 数值 积分
![提示](https://static.bdocx.com/images/bang_tan.gif)