复合梯形积分和复化3点Gauss积分.docx
- 文档编号:9351990
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:11
- 大小:190.77KB
复合梯形积分和复化3点Gauss积分.docx
《复合梯形积分和复化3点Gauss积分.docx》由会员分享,可在线阅读,更多相关《复合梯形积分和复化3点Gauss积分.docx(11页珍藏版)》请在冰点文库上搜索。
复合梯形积分和复化3点Gauss积分
实验六
一、实验名称
复合梯形积分和复化3点Gauss积分计算数值积分
二、实验目的与要求:
实验目的:
掌握复合梯形积分和复化3点Gauss积分算法。
实验要求:
1.给出复合梯形积分和复化3点Gauss积分算法思路,
2.用C语言实现算法,运行环境为MicrosoftVisualC++。
三、算法思路:
1.复合梯形积分
我们把整个积分区间[a,b]分成n个子区间[xi,xi+1],i=0,1,2,…,n,其中x0=a,xn+1=b。
这样求定积分问题就分解为求和问题:
当这n+1个结点为等距结点时,即
,i=0,1,2,…,n,复化梯形公式的形式是
算法:
inputn
fori=1tondo
enddo
outputS
2.复化3点Gauss积分
根据书上6.8节定理5,可以用递推法求正交多项式如下:
,
,
,
求
的根,得到
,
,
,则积分可近似表示为如下形式
,将
带入其中得到
,带入上式得到复化3点Gauss积分公式。
算法:
inputa,b
,
,
,
outputS
四、实验题目:
为了方便起见,我们采取复合梯形积分的方法取N充分大时(这里取N等于2的20次方)得到的积分值近似看作积分的真实值,因为题中的积分函数在积分闭区域上是一致连续的,所以由黎曼积分的定义知在N充分大的情况下,复化梯形积分的值充分接近原积分值,故我们这样做是合理的。
五、问题的解:
编写程序(程序见后面附录),输出结果如下:
为了便于看清数值积分结果与原函数积分实际结果的差异。
我在运行程序时故意计算了一下原函数积分的近似真实结果。
分析并比较得到的数据可以看出,当k越来越大时,error1越来越接近于零,数值积分的结果越来越靠近原函数积分实际结果,并且误差比率总是大于零的,当误差比率越大,误差减小得越快。
复合梯形积分的误差项是
.,
,当h趋于零时,显然积分的误差项更快地趋于零,实验结果复符合这一结论。
从三个积分误差比率来看,第一个积分的误差比率在4附近并且趋向于4,第二个积分的误差比率从很大变到四附近,第三个积分的误差比率起初相当大,到后来就达到4以上附近。
观察复化3点Gauss积分结果,发现第一个十分接近真实值,误差相当小,第二个和第三个的结果也是比较接近真实值的,但是误差就大很多了。
六、附录:
实验编程,运行环境为MicrosoftVisualC++
#include
#include
#include
#definePI3.1415926
doublef1(doublex)//定义函数f1(x)//
{
doubley;
y=exp(-x*x);
return(y);
}
doubleR1(intN,doublea,doubleb)//建立复合梯形积分//
{
doubles,h;
inti;
h=(b-a)/N;s=0.0;
for(i=1;i<=N;i++)
{
s=s+h*(f1(a+(i-1)*h)+f1(a+i*h))/2.0;
}
return(s);
}
doubleT1(doublea,doubleb)//建立复化3点Gauss积分//
{
doubles,A1,A2,A3,x1,x2,x3;
A1=A3=5.0*(b-a)/18.0;A2=4.0*(b-a)/9.0;
x1=(a+b)/2.0-sqrt(3.0/5.0)*(b-a)/2.0;
x2=(a+b)/2.0;
x3=(a+b)/2.0+sqrt(3.0/5.0)*(b-a)/2.0;
s=A1*f1(x1)+A2*f1(x2)+A3*f1(x3);
return(s);
}
doublef2(doublex)//定义函数f2(x)//
{
doubley;
y=1.0/(1.0+x*x);
return(y);
}
doubleR2(intN,doublea,doubleb)//建立复合梯形积分//
{
doubles,h;
inti;
h=(b-a)/N;s=0.0;
for(i=1;i<=N;i++)
{
s=s+h*(f2(a+(i-1)*h)+f2(a+i*h))/2.0;
}
return(s);
}
doubleT2(doublea,doubleb)//建立复化3点Gauss积分//
{
doubles,A1,A2,A3,x1,x2,x3;
A1=A3=5.0*(b-a)/18.0;A2=4.0*(b-a)/9.0;
x1=(a+b)/2.0-sqrt(3.0/5.0)*(b-a)/2.0;
x2=(a+b)/2.0;
x3=(a+b)/2.0+sqrt(3.0/5.0)*(b-a)/2.0;
s=A1*f2(x1)+A2*f2(x2)+A3*f2(x3);
return(s);
}
doublef3(doublex)//定义函数f3(x)//
{
doubley;
y=1.0/(2.0+cos(x));
return(y);
}
doubleR3(intN,doublea,doubleb)//建立复合梯形积分//
{
doubles,h;
inti;
h=(b-a)/N;s=0.0;
for(i=1;i<=N;i++)
{
s=s+h*(f3(a+(i-1)*h)+f3(a+i*h))/2.0;
}
return(s);
}
doubleT3(doublea,doubleb)//建立复化3点Gauss积分//
{
doubles,A1,A2,A3,x1,x2,x3;
A1=A3=5.0*(b-a)/18.0;A2=4.0*(b-a)/9.0;
x1=(a+b)/2.0-sqrt(3.0/5.0)*(b-a)/2.0;
x2=(a+b)/2.0;
x3=(a+b)/2.0+sqrt(3.0/5.0)*(b-a)/2.0;
s=A1*f3(x1)+A2*f3(x2)+A3*f3(x3);
return(s);
}
voidmain()//main函数进行最终运算并输出结果//
{
intk,N;doubles1[8],s2,s,error1[8],error2;
printf("s1代表复合梯形积分,s2代表复化3点Gauss积分,s代表真实积分\n");
printf("对第一个积分\n");
s2=T1(0.0,1.0);s=R1(pow(2,20),0.0,1.0);
error2=fabs(s2-s);
error1[0]=0.0;
for(k=1;k<=7;k++)
{N=pow(2,k);
s1[k]=R1(N,0.0,1.0);
error1[k]=fabs(s1[k]-s);
printf("N=%d,s1=%.12f,error1=%.12f,比率=%.12f\n",
N,s1[k],error1[k],error1[k-1]/error1[k]);
}
printf("s2=%.12f,error2=%.12f\n",s2,error2);
printf("s=%.12f\n",s);
printf("对第二个积分\n");
s2=T2(0.0,4.0);s=R2(pow(2,25),0.0,4.0);
error2=fabs(s2-s);
error1[0]=0.0;
for(k=1;k<=7;k++)
{N=pow(2,k);
s1[k]=R2(N,0.0,4.0);
error1[k]=fabs(s1[k]-s);
printf("N=%d,s1=%.12f,error1=%.12f,比率=%.12f\n",
N,s1[k],error1[k],error1[k-1]/error1[k]);
}
printf("s2=%.12f,error2=%.12f\n",s2,error2);
printf("s=%.12f\n",s);
printf("对第三个积分\n");
s2=T3(0.0,2*PI);s=R3(pow(2,25),0.0,2*PI);
error2=fabs(s2-s);
error1[0]=0.0;
for(k=1;k<=7;k++)
{N=pow(2,k);
s1[k]=R3(N,0.0,2*PI);
error1[k]=fabs(s1[k]-s);
printf("N=%d,s1=%.12f,error1=%.12f,比率=%.12f\n",
N,s1[k],error1[k],error1[k-1]/error1[k]);
}
printf("s2=%.12f,error2=%.12f\n",s2,error2);
printf("s=%.12f\n",s);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 复合 梯形 积分 Gauss