理解复合梯形、复合辛普森和龙贝格求积算法
MATLAB数值分析实验二(复合梯形、辛普森和龙贝格求积,以及二重积分计算等)

佛山科学技术学院实验报告课程名称_______________ 数值分析________________________实验项目_______________ 数值积分____________________专业班级机械工程姓名余红杰学号2111505010 指导教师陈剑成绩日期月日一、实验目的b1、理解如何在计算机上使用数值方法计算定积分 a f ""X的近似值;2、学会复合梯形、复合Simpson和龙贝格求积分公式的编程与应用。
3、探索二重积分.11 f (x, y)dxdy在矩形区域D = {( x, y) | a _ x _ b, c _ y _ d}的数值D积分方法。
二、实验要求(1)按照题目要求完成实验内容;(2)写出相应的Matlab程序;(3)给出实验结果(可以用表格展示实验结果);(4)分析和讨论实验结果并提出可能的优化实验。
(5)写出实验报告。
三、实验步骤1、用不同数值方法计算积xln xdx =-- 0 9(1)取不同的步长h,分别用复合梯形及复合辛普森求积计算积分,给出误差中关于h的函数,并与积分精确值比较两公式的精度。
(2)用龙贝格求积计算完成问题(1 )。
2、给出一种求矩形区域上二重积分的复化求积方法,然后计算二重积分..e"y dxdy,其中积分区域D二{0乞x岂1,0岂y乞1}。
1.%lnt_t.m复化梯形:function F = Int_t(x1,x2,n)%复化梯形求积公式% x1,x2为积分起点和中点%分为n个区间,没选用步长可以防止区间数为非整数。
%样点矩阵及其函数值:x = lin space(x1,x2 ,n+1);y = f(x);m = len gth(x);%本题中用Matlab计算端点位置函数值为NaN,故化为零: y(1) = 0;y(m) = 0;%算岀区间长度,步长h:h = (x2 -x1)/n;a = [1 2*o nes(1,m-2) 1];%计算估计的积分值:F = h/2*sum(a.*y);%f.mfun cti on y = f(x)y = sqrt(x).*log(x);%run 11.mclc,clear;%分为10个区间,步长0.1的积分值:F = In t_t(0,1,10);F10 = F%分为100个区间F = In t_t(0,1,100);F100 = F%误差计算W10 = abs((-4/9)-F10);W100 = abs((-4/9)-F100);W = [W10 W100]%复化辛普森:%l nt_s.mfun cti on F = In t_s(x1,x2 ,n)%复化梯形求积公式% x1,x2区间,分为n个区间。
辛普森公式 龙贝格算法

辛普森公式龙贝格算法辛普森公式与龙贝格算法 辛普森公式和龙贝格算法是数值计算中常用的数值积分方法。
它们可以用于计算函数的定积分,通过将复杂的定积分问题转化为更简单的求和问题来求解。
下面将介绍辛普森公式和龙贝格算法的原理和应用。
辛普森公式是一种通过将函数划分为多个小区间,并在每个区间内使用二次多项式逼近函数曲线的方法来求解定积分。
该公式的基本思想是将函数曲线近似看作是由一系列抛物线段组成的,然后通过对这些抛物线段的面积进行求和来获取整个函数曲线下的面积。
辛普森公式的推导基于牛顿-科特斯公式,通过将区间划分为偶数个小区间,并在每个小区间内使用二次多项式逼近函数曲线来计算定积分。
这种方法可以大大提高计算的精确性,尤其在对曲线进行高精度逼近时特别有效。
龙贝格算法是一种迭代方法,通过逐步细化区间格点来逼近定积分的方法。
它的基本思想是将区间进行二等分,然后通过递归地对子区间进行步长缩放和函数值计算,以获得更加精确的数值积分结果。
龙贝格算法的核心是通过不断加密区间格点和调整步长来逐渐提高计算精度,直到满足预设的误差要求。
这种方法在计算复杂函数的定积分时非常有用,它能够自适应地调整计算步长,并在迭代过程中逐渐收敛到期望的结果。
辛普森公式和龙贝格算法在数值计算中广泛应用于求解定积分问题。
它们适用于各种类型的函数,包括连续函数、平滑函数和非平滑函数。
通过适当选择区间划分和迭代次数,可以有效地控制计算误差,并获得满足要求的数值积分结果。
这种方法相对于传统的数值积分方法具有更高的精确性和可靠性,能够满足各种实际应用的计算需求。
总之,辛普森公式和龙贝格算法是数值计算中常用的数值积分方法。
它们通过将复杂的定积分问题转化为更简单的求和问题,并利用适当的逼近和迭代方法来提高计算精度。
这些方法在实际应用中具有很高的灵活性和可靠性,可以应对各种类型的函数和积分问题。
通过合理应用辛普森公式和龙贝格算法,我们能够更准确、更快速地求解定积分,为科学研究和工程计算提供有力的支持。
数值积分:梯形规则

数值积分:梯形规则数值积分:梯形规则--复合梯形规则--辛普森规则--复合辛普森规则--龙贝格求积公式1.问题描述微积分方法求积有很大的局限性,当碰到被积函数很复杂时,找不到相应的原函数。
积分值在几何上可解释为由 x=a,x=b,y=0和y=f(x) 所围成的曲边梯形的面积。
积分计算之所以有困难,就是因为这个曲边梯形有一条边y=f(x)是曲线。
2.理论与方法依据积分中值定理,底为b-a,而高为f(e)的矩形面积恰等于所求曲边梯形的面积I.f(e)称作区间[a,b]上的平均高度。
这样,只要对平均高度f(e)提供一种算法,便相应地获得一种数值求积的算法。
1.梯形规则(Trapezoidal rule)简单选取区间[a ,b]的中点高度作为平均高度。
取h=b-aa0=⌠(a-b)(x-b)/(a-b)dx=(b-a)/2a1=⌠(a-b)(x-a)/(b-a)dx=(b-a)/2得到:2.辛普森规则(Simpson rule)可视作用a , b与c=(a+b)/2三点高度的加权平均值作为平均高度。
3.复合梯形规则(Composite numerical)设将求积区间[a,b]划分为n等份,步长h=(b-a)/2 ,等分点为xi=a+bi , i=0,1,...,n 所谓复化求积法,就是先用低阶求积公式求得每个子段[xi,xi+1]上的积分值,然后再将它们累加求和,用各段积分之和Ii,i=0,1,n-1作为所求积分的近似值。
复化梯形公式:4.复合辛普森规则(Composite Simpson)记子段[xi,xi+1]的中点为则复化公式为复化Simpson公式:5.龙贝格求积公式(Romberg)龙贝格求积公式也称为逐次分半加速法。
它是在梯形公式、辛普森公式和柯特斯公式之间的关系的基础上,构造出一种加速计算积分的方法。
作为一种外推算法, 它在不增加计算量的前提下提高了误差的精度.在等距基点的情况下,用计算机计算积分值通常都采用把区间逐次分半的方法进行。
龙贝格求 积分---精品管理资料

龙贝格(Romberg )求积法1。
算法理论Romberg 求积方法是以复化梯形公式为基础,应用Richardson 外推法导出的数值求积方法.由复化梯形公式 )]()(2)([2222b f h a f a f h T +++=可以化为)]()]()([2[212112h a f h b f a f hT +++==)]([21211h a f h T ++一般地,把区间[a,b]逐次分半k -1次,(k =1,2,……,n)区间长度(步长)为kk m a b h -=,其中mk =2k -1。
记k T =)1(k T 由)1(k T =]))12(([21211)1(1∑=---++km j k k k h j a f h T 从而⎰badxx f )(=)1(kT-)(''122k f h a b ξ- (1)按Richardson 外推思想,可将(1)看成关于k h ,误差为)(2k h O 的一个近似公式,因而,复化梯形公式的误差公式为⎰badxx f )(-)1(k T =......4221++k k h K h K =∑∞=12i i k i h K (2)取1+k h =k h 21有 ⎰ba dx x f )(-)1(1+k T =∑∞=+121221i ik ii hK (3)误差为)(2jh O 的误差公式 )(j kT=)1(-j kT+141)1(1)1(------j j k j k T T2.误差及收敛性分析(1)误差,对复化梯形公式误差估计时,是估计出每个子区间上的误差,然后将n 个子区间上的误差相加作为整个积分区间上的误差。
(2)收敛性,记h x i =∆,由于∑=++=ni i i n x f x f h f T 01))]()([2)(=))()((21101∑∑-==∆+∆n i ni i i i i x x f x x f上面两个累加式都是积分和,由于)(x f 在区间],[b a 上可积可知,只要],[b a 的分划的最大子区间的长度0→λ时,也即∞→n 时,它们的极限都等于积分值)(f I 。
复合梯形和复合辛普森MATLAB程序

fork=1:(b-a)/h,
s= s+y(k)+y(k+1)+4*z(k);
end
s=s*h./6;
③龙贝格求积程序
function[q,R]=Romberg(a,b,eps)
h=b-a;
R(1,1)=h*(0+sqrt(b).*log(b))/2;
M=1;
J=0;
err=1;
whileerr>eps
五.实验结果比较与分析
(1)
h = 0.2时,结果如下:
h = 0.02时,结果如下:
h = 0.002时;得到的结果如下:
由结果(1)可知对于同一步长h,复合辛普森法求积分精度明显比复合梯形法求积的精度要高,且当步长取不同值时即h越小时,积分精度越高。实验结果说明不存在一个最小的h,使得精度不能再被改善。又两个相应的关于h的误差(余项)Rn(f)=- h2f’’(η);Rn(f)=- (h/2)4f(4)(η),其中η属于a到b。可知h愈小,余项愈小,从而积分精度越高。
>> h=0.002;
>> t=TiXing_quad(a,b,h)
>> s=Simpson_quad(a,b,h)
(2)
>> a=0;
>> b=1;
>> eps=10^-8;
>> [quad,R]=Romberg(a,b,eps)
(3)
>> a=0;
>> b=1;
>> eps=10^-4;
>> q=ZiShiYingSimpson('sqrt(x).*log(x)',a,b,eps)
数值分析63 复化求积公式龙贝格求积公式讲解

将积分区间 [a, b] 划分为2n等分, 即将每一个区间
[xk, xk+1]经过二等分增加了一个分点
x k ?1/2
?
1 2
(
x
k
?
x k?1)
在每个子区间 [xk, xk+1]上的积分用 辛普森公式 , 得
?x k ? 1 xk
f (x)dx ?
h 6
[
f
(
xk
)
?
4
f
(
xk
? 1/2
)
?
f (xk?1)]
?
(b ? a)5 2880n4
f
(4) (? )
?6.3.2 复化辛普森公式
将积分区间 [a, b] 划分为2n等分, 则
? ? ? I ?
b
n?1
f ( x )dx ?
x2k? 2 f ( x )d x
a
k ? 0 x2k
每个子区间 [x2k, x2k+2]上的积分用 辛普森公式 , 得
?x2 k ? 2 x2k
称为复化辛普森公式 . 记
? ? h
n?1
n?1
Sn ?
[f 6
(a) ?
4
k?0
f
( x k ? 1/2 ) ?
2
k ?1
f
(xk ) ?
f (b)]
若 f(x)? C 4[a,b], 其求积余项 为 h ? b ? a
n
Rn ( f ?
b ? a ( h )4 180 2
f (4) (? ) ?
f (b)]
称为复化梯形公式 . 记
? h
n?1
Tn
?
6b复合求积公式龙贝格算法
步长折半:[xi , xi+1/2] , [xi +1/2 , xi+1]
n1
xi xi +1/2 xi +1
h T2 n f ( xi ) f ( xi 1 2 ) f ( xi 1 2 ) f ( xi 1 ) i 0 4 n1 h f ( xi ) 2 f ( xi 1 2 ) f ( xi 1 ) i 0 4 h n1 h n1 1 h n1 f ( xi ) f ( xi 1 ) f ( xi 1 2 ) Tn f ( xi 1 2 ) 4 i 0 2 i 0 2 2 i 0 13
1 I T2 n (T2 n Tn ) 3
I Tn 4( I T2n )
3I 4T2n Tn
1 3
验后误差估计式 I T2 n (T2 n Tn )
当
T2n Tn 时,T2n即为所求的近似值。
1 (T2 n Tn ) 3
是T2n 的修正项,它与T2n 之和比T2n 、 Tn更接近与真值,即它是一种补偿。
|| T T2-T|< 2-T1|<
输出T2
16
举例
计算精度满足 | T2n Tn | 107
I [ f ]=0.946083070367
例:用梯形法的递推公式计算定积分 解:
1
0
sin( x ) dx , 要求 x
k
0 1 2 3 4 5 6 7 8 9 10
T (k)
梯形法递推公式
1 h n1 1 h n1 T2 n Tn f ( xi 1 2 ) Tn f ( a ih 0.5h) 2 2 i 0 2 2 i 0
龙贝格算法——精选推荐
Romberg 算法一、 算法思路1)梯形法的递推化为了提高求积精度,实际计算时若精度不够可以将步长逐次分半,以此求积分 f (x )ba 的近似值。
首先将[a,b]分为n 等份,共有n+1个分点,注意到每个子区间[x k ,x k +1]经过二分只增加了一个分点:x k +12=12(x k ,+x k +1)。
然后利用复合梯形求积公式可以推导出二分前后的积分值递推关系(h 代表二分前的步长):T 2n =12T n +ℎ2f (x k +12)n −1k =0。
(1.1) 2)理查森外推加速从梯形公式出发,将区间[a,b]逐次二分可以提高求积公式精度,当[a,b]分为n 等份时,若记T n = T ℎ ,当区间[a,b]分为2n 等份时,则有T 2n =T ℎ2 。
再有泰勒公式展开为:T ℎ =I +α1ℎ2+α2ℎ4+⋯+αl ℎ2l+⋯,然后用h/2代替h 有T ℎ2=I +α1ℎ24+α2ℎ416+⋯+αl ℎ22l+⋯。
再记S ℎ =4T ℎ2−T ℎ3,这将复合梯形公式的的误差阶O(ℎ2)提高到了O(ℎ4),并且易知S ℎ =S n ,即将[a,b]分为n 等份得到的复合辛普森公式。
与上述做法类似,从S ℎ 出发,当n 在增加一倍,即h 减少一半时得到S ℎ2 ,然后记C ℎ =16S ℎ2−S ℎ3,易知C ℎ =C n ,即将[a,b]分为n 等份得到的复合柯特斯公式……如此继续下去就可以得到龙贝格公式。
我们重新引入记号T 0 ℎ = T ℎ ,T 1 ℎ = S ℎ 等,从而可以将上述公式写成统一的形式:T m ℎ =I +δ1ℎ2(m +1)+δ2ℎ2(m +2)+⋯.上述处理方法就称为理查森外推加速法。
3)龙贝格求积算法设以T 0(k )表示二分k 次后求得的梯形值,且以T m (k )表示序列 T 0(k )的m 次加速值,则依理查森外推加速公式,可以得到:T m(k )=4m 4m −1T m −1(k−1)−14m −1T m −1 k,k =1,2⋯.(1.2)这就是龙贝格求积算法。
理解复合梯形、复合辛普森和龙贝格求积算法
do {
s=0;
for(n=1;n<=pow(2,i-1);n++)
s=s+f(a+1.0*(2*n-1)*(b-a)/pow(2,i));
T[i][0]=0.5*T[i-1][0]+1.0*(b-a)*s/pow(2,i);
for(j=1;j<=i;j++)
T[i][j]=(1.0*pow(4,j)*T[i][j-1]-T[i-1][j-1])/(pow(4,j)-1);
i++;
}while(fabs(T[i-1][i-1]-T[i-2][i-2])>=e);
printf("龙贝格求积结果是%lf\n",T[i-1][i-1]);
for(n=0;n<=i-1;n++)
{ printf("\n");
for(j=0;j<=n;j++)
printf("%lf ",T[n][j]);
}
system("pause");
return 0;
}
五、实验思考题
复合梯形求积公式是将积分区间分成n个很小的区间,然后将各个小区间的面积相加就得到整个积分区间的积分,当分成的区间个数n无穷大时,求得的面积就等于积分的精确值;复合辛普森求积公式是在每个子区间[xn,xn+1]上使用带余项的Simpson公式求和得出的;龙贝格求积公式也称为逐次分半加速法,它是在梯形公式、辛普森公式和科特斯公式之间的关系的基础上,构造出一种加速计算积分的方法,作为一种外推算法,它在不增加计算量的前提下提高了误差的精度。
龙贝格公式和辛普森公式和复合梯形公式
实验八数值积分信息与计算科学金融崔振威201002034031一、实验目的:1、掌握数据积分算法设计及程序实现二、实验内容:1、p290-1、p301-2三、实验要求:主程序:复合梯形公式:function [I,step,h2] = CombineTraprl(f,a,b,eps)%f 被积函数%a,b 积分上下限%eps 精度%I 积分结果%step 积分的子区间数if(nargin ==3)eps=1.0e-4;endn=1;h=(b-a)/2;I1=0;I2=(subs(sym(f),findsym(sym(f)),a)+subs(sym(f),findsym(sym(f)),b))/h;while abs(I2-I1)>epsn=n+1;h=(b-a)/n;I1=I2;I2=0;for i=0:n-1x=a+h*i;x1=x+h;I2=I2+(h/2)*(subs(sym(f),findsym(sym(f)),x)+subs(sym(f),findsym(sym(f)),x1));endendI=I2;step=n;h2=(b-a)/n;function [I,step,h] = IntSimpson(f,a,b,type,eps)%type = 1 辛普森公式%type = 2 辛普森3/8公式%type = 3 复合辛普森公式if(type==3 && nargin==4)eps=1.0e-4; %精度为0.0001endI=0;switch typecase 1,I=((b-a)/6)*(subs(sym(f),findsym(sym(f)),a)+...4*subs(sym(f),findsym(sym(f)),(a+b)/2)+...subs(sym(f),findsym(sym(f)),b));step=1;case 2,I=((b-a)/8)*(subs(sym(f),findsym(sym(f)),a)+...3*subs(sym(f),findsym(sym(f)),(2*a+b)/3)+ ...3*subs(sym(f),findsym(sym(f)),(a+2*b)/3)+subs(sym(f),findsym(sym(f)),b));step=1;case 3,n=2;h=(b-a)/2;I1=0;I2=(subs(sym(f),findsym(sym(f)),a)+subs(sym(f),findsym(sym(f)),b))/h;while abs(I2-I1)>epsn=n+1;h=(b-a)/n;I1=I2;I2=0;for i=0:n-1x=a+h*i;x1=x+h;I2=I2+(h/6)*(subs(sym(f),findsym(sym(f)),x)+...4*subs(sym(f),findsym(sym(f)),(x+x1)/2)+...subs(sym(f),findsym(sym(f)),x1));endendI=I2;step=n;endfunction [q,step]=Roberg(f,a,b,eps)%f是被积函数%a积分上限%b积分下限%eps是精度%q输出结果%step循环次数if(nargin==3)eps=1.0e-4;end;M=1;tol=10;k=0;T=zeros(1,1);h=b-a;T(1,1)=(h/2)*(subs(sym(f),findsym(sym(f)),a)+subs(sym(f),findsym(sym(f)),b)); while tol>epsk=k+1;h=h/2;Q=0;for i=1:Mx=a+h*(2*i-1);Q=Q+subs(sym(f),findsym(sym(f)),x);end;T(k+1,1)=T(k,1)/2+h*Q;M=M*2;for j=1:k;T(k+1,j+1)=T(k+1,j)+(T(k+1,j)-T(k,j))/(4^j-1);end;tol=abs(T(k+1,j+1)-T(k,j));endq=T(k+1,k+1);step=k;p290-11、(i )用组合梯形公式和M=10求下列每个积分(a)、dx x 1112)1(--⎰+解:在matlab 窗口中输入>> [q,s,h]=CombineTraprl('(1+x^2)^(-1)',-1,1)得出结果:q =1.56996299445358s =20h =0.10000000000000 所以dx x 1112)1(--⎰+值约为1.569962994,步长为0.1,M 为20(b)、dx x ⎰+10))2sin(2(解:在matlab 窗口中输入>> [q,s,h]=CombineTraprl('(2+sin(2*x^(1/2)))^(-1)',0,1)得出结果:q =0.35117779429220s =19h =0.05263157894737 所以dx x ⎰+10))2sin(2(值约为 0.351177794,步长为0.052631579,M 为19(c)、⎰425.0/x dx解:在matlab 窗口中输入>> [q,s,h]=CombineTraprl('1/(x^(1/2))',0.25,4)得出结果:q =3.00216646875717s =46h =0.08152173913043 所以⎰425.0/x dx 值约为 3.002166469,步长为0.081521739,M 为46(d)、dx e x x -⎰402解:在matlab 窗口中输入>> [q,s,h]=CombineTraprl('x^2*exp(-1)',0,4)得出结果:q =7.85012162896417s =44h =0.09090909090909所以dx e x x -⎰402值约为7.850121629,步长为0.090909090,M 为44(e)、⎰20)(2dx x xcox解:在matlab 窗口中输入>> [q,s,h]=CombineTraprl('2*x*cos(x)',0,2)得出结果:q =0.80323191187607s =36h =0.05555555555556所以⎰20)(2dx x xcox 值约为 0.803231912,步长为0.055555556,M 为36(f)、dx e x x ⎰-π0)2sin(解:在matlab 窗口中输入>> [q,s,h]=CombineTraprl('sin(2*x)*exp(-x)',0,pi)得出结果:q =-6.738211157945265e-018s =1h =3.14159265358979所以dx e x x ⎰-π0)2sin(值约为 -6.7382111578,步长为3.141592653,M 为12、(ii )用组合辛普森公式和M=10求下列每个积分(a)、dx x 1112)1(--⎰+解:在matlab 窗口中输入>> [I,step,s] = IntSimpson('(1+x^2)^(-1)',-1,1,3)得出结果:I =1.57079538809119step =5s =0.400000000000000所以dx x 1112)1(--⎰+值约为1.570795388,步长为0.4,M 为5(b)、dx x ⎰+10))2sin(2(解:在matlab 窗口中输入>> [I,step,s] = IntSimpson('(2+sin(2*x^(1/2)))^(-1)',0,1,3)得出结果:I =0.35047636367125step =10s =0.10000000000000 所以dx x ⎰+10))2sin(2(值约为0.350476364,步长为0.1,M 为10(c)、⎰425.0/x dx解:在matlab 窗口中输入>> [I,step,s] = IntSimpson('1/(x^(1/2))',0.25,4,3)得出结果:I =3.00030161515673step =14s =0.26785714285714 所以⎰425.0/x dx 值约为3.000301615,步长为0.267857143,M 为14(d)、dx e x x -⎰402解:在matlab 窗口中输入>> [I,step,s] = IntSimpson('x^2*exp(-1)',0,4,3)得出结果:I =7.84809474499077step =4s =1所以dx e x x -⎰402值约为7.848094745,步长为1,M 为4(e)、⎰20)(2dx x xcox解:在matlab 窗口中输入>> [I,step,s] = IntSimpson('2*x*cos(x)',0,2,3)得出结果:I =0.80494830253761step =6s =0.33333333333333所以⎰20)(2dx x xcox 值约为0.804948303,步长为0.333333333,M 为6(f)、dx e x x ⎰-π0)2sin(解:在matlab 窗口中输入>> [I,step,s] = IntSimpson('sin(2*x)*exp(-x)',0,pi,3)得出结果:I =-6.738211157945265e-018step =2s =1.57079632679490所以dx e x x ⎰-π0)2sin(值约为 -6.738211158,步长为1.570796327,M 为2P301-12、(a )、dx x x ⎰-2024解:在matlab 窗口中输入>> [q,s]=Roberg('sqrt(4*x-x^2)',0,2)得出结果:>> [q,s]=Roberg('sqrt(4*x-x^2)',0,2)q =3.14155917503659s =9所以,该积分值约为3.1415591750(b )、dx x ⎰+1021/4解:在matlab 窗口中输入>> [q,s]=Roberg('4/(1+x^2)',0,1)得出结果:q =3.14159266527772s =4所以,该积分值约为3.1415926653通过利用龙贝格公式积分求得结果,两个定积分得出结果的积分速度明显不同。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
do {
s=0;
for(n=1;n<=pow(2,i-1);n++)
s=s+f(a+1.0*(2*n-1)*(b-a)/pow(2,i));
T[i][0]=0.5*T[i-1][0]+1.0*(b-a)*s/pow(2,i);
for(j=1;j<=i;j++)
T[i][j]=(1.0*pow(4,j)*T[i][j-1]-T[i-1][j-1])/(pow(4,j)-1);
x=1.0*a;h=1.0*(b-a)/n;
s=0;
for(i=1;i<n;i++)
{
x=x+h;
s=s+f(x);
}
s=h*(f(a)+2*s+f(b))/2;
printf("复合梯形求积结果是%lf\n",s);
s=0;
x=1.0*a;
for(i=1;i<=n/2;i++)
{
x=a+(2*i-1)*h;
二、实验内容(含实验原理介绍)
计算积分 的近似值,要求分别使用如下方法(限定用九个点上函数值计算):
(1)复合梯形公式;
(2)复合辛普生公式;
(3)龙贝格求积法.
三、实验过程及步骤(包含使用软件或实验设备等情况)
1、编辑程序并进行调试;
2、根据提示输入选择的方法;
3、输入积分的上限a值下限b值;
4、程序调用预设的方程求解输出符合条件的结果;
实验报告
实验名称
理解复合梯形、复合辛普森和龙贝格求积算法
专业
Байду номын сангаас计算机科学与技术
课程名称
计算方法
指导老师
班级
2011级二表一班
姓名
姜玉龙
学号
评分
实验地点
1C26217
实验日期
一、实验目的
1.理解复合梯形、复合辛普森和龙贝格求积算法的实验原理;
2.能够应用于解决实际问题,求出相应结果。
3.熟悉编译软件环境,能够编程实现复合梯形、复合辛普森和龙贝格求积算法。
s+=2*f(x)+f(x+h);
}
s=h/3*(f(a)-f(b)+2*s);
printf("复合吉普森求积结果是%lf\n",s);
printf("输入取值精度e:\n");
scanf("%lf",&e);
s=0;
memset(T,0,sizeof(T));
T[0][0]=0.5*(b-a)*(f(a)+f(b));
double f(double x)
{
return x/(4+x*x);
}
int main()
{
int a,b,n,i,j;
double s,x,h,e,T[30][30];
printf("请输入区间a,b和n值:\n");
scanf("%d%d%d",&a,&b,&n);
printf("此题求[%d,%d]区间的函数x/(4+x*x)值\n",a,b);
i++;
}while(fabs(T[i-1][i-1]-T[i-2][i-2])>=e);
printf("龙贝格求积结果是%lf\n",T[i-1][i-1]);
for(n=0;n<=i-1;n++)
{ printf("\n");
for(j=0;j<=n;j++)
printf("%lf ",T[n][j]);
六、实验总结(含实验心得体会,收获与不足等)
通过这次实验,我了解了复合梯形、复合辛普森和龙贝格求积的基本原理,熟悉了相关的基本概念,通过编程完成锻炼了我的实践能力与动手能力,为以后的学习打下了坚实的基础。使我对算法上机实践有了更深的理解。
说明:该程序的求解方程是:∫x/(4+x*x),其中上下限为a、b
四、实验结果(含算法说明、程序、数据记录及分析等,可附页)
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<math.h>
using namespace std;
}
system("pause");
return 0;
}
五、实验思考题
复合梯形求积公式是将积分区间分成n个很小的区间,然后将各个小区间的面积相加就得到整个积分区间的积分,当分成的区间个数n无穷大时,求得的面积就等于积分的精确值;复合辛普森求积公式是在每个子区间[xn,xn+1]上使用带余项的Simpson公式求和得出的;龙贝格求积公式也称为逐次分半加速法,它是在梯形公式、辛普森公式和科特斯公式之间的关系的基础上,构造出一种加速计算积分的方法,作为一种外推算法,它在不增加计算量的前提下提高了误差的精度。