您的当前位置:首页正文

数值分析上机作业(三)

2021-07-20 来源:个人技术集锦
数值积分上机作业(三)

数值积分

一、设计要求

试用不同的数值积分方法计算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方法。

因篇幅问题不能全部显示,请点此查看更多更全内容