数值积分用matlab实现Word文档格式.docx
- 文档编号:8263326
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:18
- 大小:121.11KB
数值积分用matlab实现Word文档格式.docx
《数值积分用matlab实现Word文档格式.docx》由会员分享,可在线阅读,更多相关《数值积分用matlab实现Word文档格式.docx(18页珍藏版)》请在冰点文库上搜索。
1.2.3应用举例
通过简单举例,自建一个相对简单和复杂的函数,用上面编写的Matlab源程序来解决实际问题,体会数值积分和Matlab的优势.
2牛顿-柯特斯公式及Matlab实现
2.1牛顿-柯特斯公式的基本原理方法
设将积分区间[a,b]划分为n等分,步长为
,选取等距节点
构造出的差值型求积公式
,(2.1)
称为牛顿-柯特斯公式,式中
称为柯特斯系数.根据
,
(2.2)
引进变量代换
,则有
(2.3)
当n=2时,此时柯特斯系数为
,
,相应的求积公式就是辛普森求积公式:
(2.4)
2.2牛顿-柯特斯公式的Matlab实现
function[C,g]=NCotes(a,b,n,m)
%a,b分别为积分的上下限;
%n是子区间的个数;
%m是被调用第几个被积函数;
%当n=1时计算梯形公式;
当n=2时计算辛普森公式,以此类推;
I=n;
h=(b-a)/i;
z=0;
forj=0:
i
x(j+1)=a+j*h;
s=1;
ifj==0
s=s;
else
fork=1:
j
s=s*k;
end
end
r=1;
ifi-j==0
r=r;
else
fork=1:
(I-j)
r=r*k;
end
end
ifmod((I-j),2)==1
q=-(I*s*r);
else
q=i*s*r;
y=1;
fork=0:
ifk~=j
y=y*(sym('
t'
)-k);
l=int(y,0,i);
C(j+1)=l/q;
z=z+C(j+1)*f1(m,x(j+1));
g=(b-a)*z
3复合求积公式及Matlab实现
3.1复合梯形公式的基本原理
将区间[a,b]划分成n等分,分点
在每个子区间[
](
)上采用梯形公式得:
(3.1)
记
(3.2)
称式(3.2)为复合梯形公式.
3.2复合梯形公式的Matlab实现
functions=trapr1(f,a,b,n)
%f表示被积函数;
%a,b表示积分上下限;
h=(b-a)/n;
s=0;
(n-1)
x=a+h*k;
s=s+feval('
f'
x);
end
formatlong
s=h*(feval('
a)+feval('
b))/2+h*s;
3.3复合辛普森求积公式的基本原理
将区间[a,b]分等分,在每一个子区间
]上采用辛普森公式,若记
,则得
(3.3)
(3.4)
称式(3.4)为复合辛普森求积公式.
3.4复合辛普森求积公式的Matlab实现
functions=simpr1(f,a,b,n)
h=(b-a)/(2*n);
s1=0;
s2=0;
n
x=a+h*(2*k-1);
s1=s1+feval('
x=a+h*2*k;
s2=s2+feval('
s=h*(feval('
b)+4*s1+2*s2)/3;
4龙贝格求积公式及Matlab实现
4.1龙贝格算法的基本原理
由梯形的递推法可以看出,将积分区间等分时,用复化梯形公式计算的结果
作为积分
的近似值,其误差近似值为
(4.1)
可以设想,如果用这个误差作为
的一种补偿,即将
(4.2)
作为积分的近似值,可望提高其精确度.直接根据复化求积公式,不难验证
(4.3)
这说明,将区间对分前后两次复化梯形公式的值,按式
(4.4)
作线性组合恰好等于复合辛普森公式的值
,它比
更接近于近似值.同样,根据
(4.5)
用
于
作线性组合会得到比
更精确的值,且通过直接验证可得
(4.6)
再由
(4.7)
与
作线性组合,又可得到比
更精确的值,通常记为
,即
(4.8)
此式(4.8)就称为龙贝格求积公式.
上述用若干积分近似值推算出更为精确的积分近似值得方法,称为外推法.我们将
序列
分别称为梯形序列,辛普森序列,柯特斯序列和龙贝格序列.由龙贝格序列求积的算法称为龙贝格算法.具体步骤为:
第一步:
算出
和
的值,根据公式
(4.9)
求出
;
第二步:
将区间[a,b]分半,算出
的值,并根据(4.3)和(4.9)式计算
第三步:
再将区间分半,算出
及
,再有公式(4.4)求出
;
第四步:
再将区间分半,计算
并根据公式(4.5)计算
.
第五步:
再将区间分半,类似上述过程计算
重复以上步骤即可得到
一直到龙贝格序列中前后两项的绝对值差不超过给定的误差险为止.
4.2龙贝格算法的Matlab实现
function[R,quad,err,h]=romber(f,a,b,n,delta)
%n是子区间的个数
%delta是误差限
M=1;
h=b-a;
err=1
J=0;
R=zeros(4,4);
R(1,1)=h*(feval('
b))/2
while((err>
delta)&
(J<
n))|(J<
4)
J=J+1;
h=h/2;
s=0;
forp=1:
M
x=a+h*(2*p-1);
s=s+feval('
R(J+1,1)=R(J,1)/2+h*s;
M=2*M;
forK=1:
J
R(J+1,K+1)=R(J+1,K)+(R(J+1,K)-R(J,K))/(4^K-1);
err=abs(R(J,J)-R(J+1,K+1));
quad=R(J+1,J+1);
5高斯-勒让德求积公式及Matlab实现
5.1高斯-勒让德求积公式的基本原理
在高斯求积公式
(5.1)
中,若取权函数
=1,区间[-1,1],则得公式
(5.2)
我们知道勒让德多项式是区间[-1,1]上的正交多项式,因此,勒让德多项式
的零点就是求积公式(5.2)的高斯点,形如(5.1)式的高斯公式特别的称为高斯-勒让德求积公式.如下表5.1所示为高斯-勒让德求积公式的节点数和系数.
5.2高斯-勒让德求积公式的Matlab实现
functionquad=gauss8(f,a,b,x,A)
N=length(x);
T=zeros(1,N);
T=(a+b)/2+((b-a)/2)*x;
quad=((b-a)/2)*sum(A.*feval('
T));
表5.1高斯-勒让德求积公式的节点数和系数
n
0.0000000
2.0000000
3
0.8611363
0.3399810
0.3478548
0.6521452
1
0.5773503
1.0000000
4
0.9061978
0.5384693
0.2369269
0.4786287
0.5688889
2
0.7745967
0.5555556
0.8888889
5
0.9324695
0.6612094
0.2386192
0.1713245
0.3607616
0.4679139
6各个求积公式的应用举例与比较分析
6.1简单数值积分
的解(精确值0.946083070367183)
6.1.1牛顿-柯特斯当n=1时的梯形算法和n=2时的辛普森算法的结果
解:
先用M文件定义一个f1.m的函数
functionf=f1(i,x)
g
(1)=sqrt(x);
ifx==0
g
(2)=1;
else
g
(2)=sin(x)/x;
f=g(i);
输入>
>
Ncotes(0,1,1,2)
回车得到;
ans=
0.9270
Ncotes(0,1,2,2)
回车得到:
0.9461
6.1.2复合梯形公式和复合辛普森求积公式的计算结果
建立一个M文件定义一个f.m函数
functiony=f(x)
ifx==0
y=sin(x)/x
trapr1(‘f’,0,1,10)
0.9458
simpr1(‘f’,0,1,10)
0.9461
6.1.3龙贝格求积公式的计算结果(取误差不超过
)
romber(‘f’,0,1,10,0.5*10^(-10))
quad=
0.92070000
0.93980.9461000
0.94450.94610.946100
0.94570.94610.94610.94610
0.94600.94610.94610.94610.9461
6.1.4高斯-勒让德求积公式的计算结果(给定节点3)
functiony=f(x);
y=sin(x)/x;
输入
gauss8(‘f’,0,1,[-0.7745966692,0.7745966692,0],[0.5555555556,0.5555555556,0.8888888888])
0.8956
6.2复杂数值积分
的解(精确值-1.8785)
6.2.1牛顿-柯特斯当n=1时的梯形算法和n=2时的辛普森算法的结果
g
(2)=cos(x)–1/(1+x.^2)–1/(4.*sqrt(4+x.^2));
Ncotes(0,2*pi,1,2)
回车得到
-1.8692
Ncotes(0,2*pi,2,2)
-1.8704
6.2.2复合梯形公式和复合辛普森求积公式的计算结果
y=cos(x)–1/(1+x.^2)–1/(4.*sqrt(4+x.^2));
trapr1(‘f’,0,2*pi,10)
-1.8748
simpr1(‘f’,0,2*pi,10)
-1.8694
6.2.3龙贝格求积公式的计算结果(取误差不超过
romber(‘f’,0,2*pi,10,0.5*10^(-10))
-1.8764
6.3各个求积公式的比较分析(以
的各个积分结果为例)
表6.1各个数值积分的比较
积分方法
牛顿柯特斯(梯形)
牛顿-柯特斯(辛普森)
复合梯形
复合辛普森
龙贝格
高斯-勒让德
精确值
实际值
0.9270
0.9460
0.9458
0.8956
误差
0.189
0.0001
0.0003
0.0505
代数精度
10
牛顿-柯特斯方法是一种利用插值多项式来构造数值积分的常用方法,这其中梯形
积分方法的误差最大,近似效果最差,辛普森方法的精度比梯形积分高了一个数量级,它的代数精度比梯形积分的代数精度高,能更好地近似积分值;
牛顿-柯特斯积分方法的误差比辛普森积分精度高两个数量级.复合梯形积分方法比单独的梯形积分精度高,龙贝格方法收敛速度快、计算精度较高,但是计算量较大.高斯求积方法积分精度高、数值稳定、收敛速度较快,但是节点与系数的计算较麻烦,而且要求已知积分函数.
结论
本文主要讨论了数值积分的计算方法并通过MATLAB软件编程实现,通过前面的研究我们知道求数值积分近似值的计算方法很多,包括牛顿-柯特斯求积公式、复合求积公式、龙贝格求积公式、高斯求积公式等等.其中牛顿-柯特斯方法是一种利用插值多项式来构造数值积分的常用方法,这其中梯形积分方法的误差最大,近似效果最差,辛普森方法的精度比梯形积分高了一个数量级,它的代数精度比梯形积分的代数精度高,能更好地近似积分值;
牛顿-柯特斯积分方法的误差比辛普森积分精度高两个数量级.因此,一般情况下,代数精度越高,积分公式计算精度也越高.但是高阶的牛顿-柯特斯方法的收敛性没有保证,因此,在实际计算中很少使用高阶的牛顿-柯特斯公式.复合梯形积分方法比单独的梯形积分精度高,它的积分精度和被积函数有关,还和复合积分时的步长有关.复合辛普森积分公式比单独的辛普森积分公式高近7个数量级,效果明显.龙贝格方法收敛速度快、计算精度较高,但是计算量较大.高斯求积方法积分精度高、数值稳定、收敛速度较快,但是节点与系数的计算较麻烦、而且要求已知积分函数.一般来说,牛顿-柯特斯方法的代数精度越高,数值积分的效果越好、越精确.当积分区间比较大的时候,可以采用复化积分方法可以得到更好的效果;
变步长积分方法不仅可以很好地控制计算误差,并且可以寻找到适当的积分步长;
龙贝格积分方法可以更好地利用变步长复合积分公式得到的积分序列从而得到更为精确的数值结果,是一个较好的数值积分方法.高斯求积方法精确度高,收敛性快也是一种很优秀的数值积分方法.
参考文献
[1]张德丰.Matlab数值分析与应用[M].北京:
国防工业出版社,2007.1-1
[2]胡良剑,孙晓君.MATLAB数学实验[M].
北京:
高等教育出版社,2006
[3]李庆扬,王能超,易大义.数值分析[M].北京:
清华大学出版社,2008
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 积分 matlab 实现