数值积分
一、设计要求
试用不同的数值积分方法计算I(f)=注:I(f)=−1.4260247563462665
1、把[1,3]分成四个子区间,用五点Gauss−Lengendre求积公式的复化求积公式计
算。
2、用Romberg求积方法计算积分,取ε=10,并与第一种方法比较。
−6
3
∫
1
1010
f(x)dx的近似值,其中f(x)=()2sin。
xx二、五点Gauss−Lengendre求积公式的复化求积方法
2.1方法描述
一般的N点Gauss−Lengendre公式对于次数小于等于2N−1的多项式是精确的,数值积分公式为
GN(f)=ωN,1f(xN,1)+ωN,2f(xN,2)+⋅⋅⋅+ωN,Nf(xN,N)
所需的横坐标xN,k和权ωN,k已制成表,便于使用。这些节点实际上是勒让德多项式的根,而对应的权则需要通过求解方程组得到。
当N=5时,节点和权分别如下列数组所示:
x=[-0.9061798459 -0.5384693101 0.0000000000 0.5384693101 0.9061798459]
ω=[ 0.2369268851 0.4786286705 0.5688888888 0.4786286705 0.2369268851]
上述节点和权为在区间[−1,1]的Gauss−Lengendre求积公式。要在任意区间[a,b]上应用公式,则需要进行变量替换
t=
而由关系式
a+ba−bb−a+x,dt=dx222
∫
可得积分公式
baf(t)dt=∫f(
−1
1
a+ba−bb−a+x)dx222
∫
bab−aNa+ba−bf(t)dt=ωf(+xN,k)∑N,k2k=122
2.2方案设计(MATLAB版)
2.2.1在子区间内使用Gauss−Lengendre求积公式
在单个区间内,使用Gauss−Lengendre求积公式,求得原函数在此区间内的积分。编写程序如下:
这段程序通过输入积分函数f,积分区间[a,b],以及Gauss−Lengendre积分的节点和权重,可以得出被积函数在此区间内的积分。将此段程序保存为g_l.m。2.2.2复化的Gauss−Lengendre积分
编辑程序如下:
这段程序通过给定积分区间和被积函数,以及子区间的个数,可以通过复化的
Gauss−Lengendre积分求出被积函数在此区间上的积分。将此函数保存为
gauss_legendre.m。2.2.3被积函数
2.2.4主程序
这段程序先给定积分区间,然后给出子区间的个数,从而进行复化的
Gauss−Lengendre积分。将这段程序保存为main.m。
2.3实验结果
运行main.m,可得数值积分的结果为
quad =-1.42581597388094
三、Romberg求积方法
3.1方法描述
使用理查森外推加速方法,即可得到Romberg积分算法。设T0(k)表示二分k次后求得
(k)
的梯形值,且以Tm表示序列{T0(k)}的m次加速值,则依递推公式可得
T
(k)
m4m1(k+1)(k)=mTm−Tm−1−1,k=1,2,⋅⋅⋅m4−14−1
上式即Romberg求积方法。计算过程如下:(1)取k=0,h=b−a,求T0(0)=
数)。
(2)求梯形公式T0(
h[f(a)+f(b)]。令1→k(k即区间[a.b]的二分次2
b−a(k)
,即按下式计算)T0
2kT0(k)
1(k−1)h2
=T0+∑f(x1)
i−22i=1
2
k−1
(3)求加速值,按Romberg求积公式逐个求出T表的第k行其余各元素
Tj(k−j)(j=1,2,⋅⋅⋅,k)。
(4)若|Tk0−Tk0−1|<ε,则终止计算,并取Tk(0)≈I;否则令k+1→k,转(2)继续计
算。
3.2方案设计(MATLAB版)3.2.1Romberg积分
编写函数如下:
此函数通过输入被积函数、积分区间以及允许误差,通过Romberg算法,得到
Romberg表格及积分值。将这段程序保存为romber.m。
3.2.2被积函数
3.2.3主程序
编写主程序如下:
这段程序主要为了给出积分区间和允许误差。将这段程序保存为main.m。3.3实验结果
运行main.m,可得数值积分的结果为K012345678K012345678K012345678
00000000
-1.426024756337070000
-1.33069052846807-1.42637524660040-1.42603718334903-1.42602478353231-1.42602475636821
T0(k)
-56.51953289866459-52.23287331591076-23.85638482994725-6.82780081335997-2.68153053118902-1.73265584933527-1.50221765288569-1.44504378928944-1.43077768821870
T1(k)
0
-50.80398678832615-14.39755533462608-1.15160614116421-1.29944043713204-1.41636428871735-1.42540492073583-1.42598583475735-1.42602232119512
T2(k)
00
-11.97045990437941-0.26854286160009-1.30929605686323-1.42415921215637-1.42600762953707-1.42602456235878-1.42602475362431
T3(k)
000
-0.08279814663534-1.32581594885153-1.42598243684356-1.42603696949549-1.42602483113373-1.42602475666027
T4(k)
00000
T5(k)
000000
T6(k)
0000000
T7(k)
-1.42646878004921-1.42603685288642-1.42602477141128-1.42602475634166
-1.42603674740970-1.42602476846098-1.42602475633798
-1.42602476772980-1.42602475633724
T8(k)
且
quad =-1.42602475633707
四、两种方法的比较与讨论
比较两种计算方法,在计算结果方面:
数值方法
五点Gauss−Lengendre计算值
-1.42581597388094-1.42602475633707
误差
-0.00020878246532-0.00000000000919
Romberg求积
由上表可知,Romberg求积方法的精度要高于五点Gauss−Lengendre方法。
从计算量的角度分析两种计算方法,五点Gauss−Lengendre方法在每个子区间内只需要进行五次函数计算,以及其他一些加权、求和的运算,而Romberg算法计算量明显远大于前者的计算量。
因此,在对精度要求较高的计算中,采用Romberg算法较好;而在精度要求相对较低,而效率要求较高时,需要采用Gauss−Lengendre方法。
因篇幅问题不能全部显示,请点此查看更多更全内容