数值积分算法与MATLAB实现_第1页
数值积分算法与MATLAB实现_第2页
数值积分算法与MATLAB实现_第3页
数值积分算法与MATLAB实现_第4页
数值积分算法与MATLAB实现_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 编 号: 审定成绩: 重庆邮电大学毕业设计(论文)设计(论文)题目:数值积分算法与matlab实现学 院 名 称 :数理学院学 生 姓 名 :专 业 :数学与应用数学班 级 :学 号 : 指 导 教 师 :答辩组 负责人 :填表时间: 年 月重庆邮电大学教务处制摘 要在求一些函数的定积分时,由于原函数十分复杂难以求出或用初等函数表达,导致积分很难精确求出,只能设法求其近似值,因此能够直接借助牛顿-莱布尼兹公式计算定积分的情形是不多的。数值积分就是解决此类问题的一种行之有效的方法。积分的数值计算是数值分析的一个重要分支;因此,探讨近似计算的数值积分方法是有着明显的实际意义的。本文从数值积分问题

2、的产生出发,详细介绍了一些数值积分的重要方法。本文较详细地介绍了牛顿-科特斯求积公式,以及为了提高积分计算精度的高精度数值积分公式,即龙贝格求积公式和高斯-勒让德求积公式。除了研究这些数值积分算法的理论外,本文还将这些数值积分算法在计算机上通过matlab软件编程实现,并通过实例用各种求积公式进行运算,分析比较了各种求积公式的计算误差。【关键词】数值积分 牛顿-科特斯求积公式 高精度求积公式 matlab软件abstractwhen the solution of the definite integral of some function values,because the origina

3、l function is very complex and difficult to find the elementary function expression, the integral is difficult to accurately calculate, only managed to find the approximate value, and the case is small that allows to direct interface with the newton - leibniz formula to calculate the definite integr

4、al. numerical integration is an effective method to solve such problems. the numerical integration is an important branch of numerical analysis; therefore, exploring the approximate calculation of the numerical integration method has obvious practical significance. this article departure from the nu

5、merical integration problem, described in detail some important numerical integration methods.this paper has introduced detail the newton - coates quadrature formula, and in order to improve the calculation accuracy of numerical integration formulas, more precise formulas have romberg quadrature for

6、mulas and the gauss - legendre quadrature formula. in addition to the study of these numerical integration algorithm theory, the article also involve what these numerical integration algorithm be programmed by matlab software on the computer, and an example is calculated with a variety of quadrature

7、 formulas, finally analysis and comparison to various quadrature formulas calculation error.【key words】 numerical integration newton-cotes quadrature formula high-precision quadrature formula matlab software目 录前 言1第一章 牛顿-科特斯求积公式2第一节 数值求积公式的构造2第二节 复化求积公式9第三节 本章小结12第二章 高精度数值积分算法13第一节 梯形法的递推13第二节 龙贝格求积

8、公式14第三节 高斯求积公式17第四节 高斯-勒让德求积公式19第五节 复化两点高斯-勒让德求积公式22第六节 本章小结23第三章 各种求积公式的matlab编程实现与应用24第一节 几个低次牛顿-科特斯求积公式的matlab实现24第二节 复化求积公式的matlab实现28第三节 龙贝格求积公式的matlab实现33第三节 高斯-勒让德求积公式的matlab实现34第五节 各种求积算法的分析比较36第六节 本章小结38结 论39致 谢40参考文献41附 录43一、英文原文43二、英文翻译52前 言对于定积分,在求某函数的定积分时,在一定条件下,虽然有牛顿-莱布里茨公式可以计算定积分的值,但在

9、很多情况下的原函数不易求出或非常复杂。被积函数的原函数很难用初等函数表达出来,例如等;有的函数的原函数存在,但其表达式太复杂,计算量太大,有的甚至无法有解析表达式。因此能够借助牛顿-莱布尼兹公式计算定积分的情形是不多的。另外,许多实际问题中的被积函数往往是列表函数或其他形式的非连续函数,对这类函数的定积分,也不能用不定积分方法求解,只能设法求其近似值。因此,探讨近似计算的数值积分方法是有明显的实际意义的,即有必要研究定积分的数值计算方法,以解决定积分的近似计算。而数值积分就是解决此类问题的一种有效的方法,它的特点是利用被积函数在一些节点上的信息求出定积分的近似值。微积分的发明是人类科学史上一项

10、伟大的成就,在科学技术中,积分是经常遇到的一个重要计算环节。数值积分是数学上重要的课题之一,是数值分析中重要的内容之一,也是应用数学研究的重点。随着计算机的出现,近几十年来,对于数值积分问题的研究已经成为一个很活跃的研究领域。现在,数值积分在计算机图形学,积分方程,工程计算,金融数学等应用科学领域都有着相当重要的应用,所以研究数值积分问题有着很重要的意义。国内外众多学者在数值积分应用领域也提出了许多新方法。在很多实际应用中,只能知道积分函数在某些特定点的取值,比如天气测量中的气温、湿度、气压等,医学测量中的血压、浓度等等。通过这个课题的研究,我们将会更好地掌握运用数值积分算法求特殊积分函数的定

11、积分的一些基本方法、理论基础;并且通过matlab软件编程的实现,应用于实际生活中。第一章 牛顿-科特斯求积公式第一节 数值求积公式的构造大多数实际问题的积分是需要用数值积分方法求出近似结果的。数值积分原则上可以用于计算各种被积函数的定积分,无论被积函数是解析解形式还是数表形式,其基本原理都是用多项式函数近似代替被积函数,用多项式的积分结果近似代替对被积函数的积分。由于所选多项式形式的不同,可以有许多种数值积分方法。而利用插值多项式来构造数值求积公式是最常用的一种方法。对于积分,用一个容易积分的函数去代替被积函数,这样的自然以多项式为最佳,因为多项式能很好的逼近任何连续函数,而且容易求出其原函

12、数。一、 求积公式的推导在积分区间上取有限个点,作的次插值多项式,其中,为次插值基函数。用近似代替被积函数,则得 若记 则得数值求积公式 其中称为求积系数,称为求积节点。则称该求积公式为插值型求积公式。知道了插值型求积公式以及其构造方法。为了便于计算与应用,常将积分区间的等分点作为求积节点,这样构造出来的插值型求积公式就称为牛顿-科特斯(newton-cotes)求积公式。在积分区间上取个等距节点,其中,做次拉格朗日插值多项式,因为,所以 记 截去第二项得 显然与无关,只与节点有关。令,则当时,于是 而 从而得记 则 故求积公式可写成 这就是牛顿-科特斯求积公式,其中称为科特斯系数。部分科特斯

13、系数取值如下表1.1科特斯系数具有以下特点1(1) (2) (3)当 8 时,出现负数,稳定性得不到保证。而且当 较大时,由于runge现象,收敛性也无法保证。故一般不采用高阶的牛顿-科特斯求积公式。 (4)当 7 时,牛顿-科特斯公式是稳定的。表1.1 部分科特斯系数表知道了什么是牛顿-科特斯求积公式,下面我们来看它的误差估计,首先来看看牛顿-科特斯求积公式的截断误差。我们知道牛顿-科特斯求积公式是一个插值型数值求积公式,当用插值多项式代替进行积分时,其截断误差即积分真值和近似值之差,推导如下,由插值多项式的误差估计可知,用次拉格朗日多项式逼近函数时产生的误差为 其中。对上式两边从到作定积分

14、,便可得出它的截断误差 二、几个低次牛顿-科特斯求积公式从上面的讨论可知,用多项式近似代替被积函数进行数值积分时,虽然最高次数可是8,但是8次多项式的计算式非常繁杂的。常用的是下面介绍的几种低次多项式。1、 矩形求积公式定义1.1 在牛顿-科特斯求积公式中,如果取,用零次多项式(即常数)代替被积函数,即用矩形面积代替曲边梯形的面积,则有 称式为矩形求积公式根据牛顿-科特斯求积公式的误差理论式,矩形求积公式的误差估计为2、梯形求积公式定义1.21 在牛顿-科特斯求积公式中,如果取,用一次多项式代替被积函数,即用梯形面积代替曲边梯形的面积,则有其中,,查表可得代入上式得出 称式为梯形求积公式由于用

15、一次多项式近似代替被积函数,所以它的精度是1。也就是说,只有当被积函数是一次多项式时,梯形求积公式才是准确的。根据牛顿-科特斯求积公式的误差理论式,梯形求积公式的误差估计为是被积函数二阶导数在点的取值,3、辛浦生求积公式定义1.32 在牛顿-科特斯求积公式中,如果取,用二次多项式代替被积函数,即曲边用抛物线代替,则有其中,,查表可得,代入上式得出 称式为辛浦生求积公式,也称抛物线求积公式。它的几何意义是:用过3个点,的抛物线和,构成的曲边梯形面积,近似地代替了被积函数形成的曲边和,构成的曲线梯形面积。下面对辛浦生求积公式的误差进行估计。由于辛浦生求积公式是用二次多项式逼近被积函数推得的,原则上

16、它的代数精度为2.但因多项式次数是偶数,根据定理1.1可知,它的代数精度为3过,和3个点,构造一个的三次lagrange插值多项式,且使。根据lagrange插值余项定理得 对上式两边从到进行积分,即可得到 根据定积分中值定理可知,在上总有一点满足下述关系:通过变量代换,,很容易求得把这个结果代入式,便得出辛浦生求积公式的误差估计式 4、科特斯求积公式由于和时具有相同的迭代精度,但是时计算量小,故的newton-cotes积分公式用的很少。定义 1.4 在牛顿-科特斯求积公式中,如果取时,牛顿科特斯公式为 称式为科特斯求积公式。同理根据式可求得其误差估计式 三、求积公式的代数精度如果被积函数为

17、任意一个次数不高于次的多项式时,数值求积公式一般形式的截断误差;而当它是次多项式时,则说明数值求积公式具有次代数精度。一个数值求积公式的代数精度越高,表示用它求数值积分时所需逼近被积函数的多项式次数越高。定理 1.13 牛顿-科特斯求积公式的代数精度等于,当为偶数时,牛顿-科特斯求积公式的代数精度等于证明 如果被积函数是一个不大于次的多项式,则,即;而当时任意一个次多项式时,故 所以,按照代数精度的定义可知,一般情况下,牛顿-科特斯求积公式的代数精度等于。当为次多项式时, 牛顿-科特斯求积公式的代数精度至少等于。若设是一个次多项式,这时为一常数,而因此,只要证明在是偶数时,定理就可得证。为此,

18、设,令,于是由于为偶数,不妨设,为正整数,则,于是再引进变换,则,代入上式右侧,得出 最后的积分中被积函数是奇函数,所以积分结果等于零,定理1.1得证。第二节 复化求积公式前面导出的误差估计式表明,用牛顿-科特斯公式计算积分近似值时,步长越小,截断误差越小。但缩小步长等于增加节点,亦即提高插值多项式的次数。龙格现象表明,这样做并不一定能提高精度。理论上已经证明,当时,牛顿-科特斯公式所求得的近似值不一定收敛于积分的准确值,而且随着的增大,牛顿-科特斯公式是不稳定的。因此,实际中不常用高阶牛顿-科特斯公式。为了提高计算精度,可考虑对被积函数用分段低次多项式插值,由此导出复化求积公式。一、复化梯形

19、求积公式在实际应用中,若将积分区间分成若干个小区间,在各个小区间上采用低次的求积分式(梯形公式或辛浦生公式),然后再利用积分的区间可加性,把各区间上的积分加起来,便得到新的求积公式,这就是复化积分公式的基本思想。以梯形面积近似曲边梯形面积,即用梯形公式求小区间上积分的近似值。这样求得近似值显然比用梯形公式计算精度高。定积分存在定理表明,只要被积函数连续,当小区间的长度趋于零时,小梯形面积之和即就趋于曲边梯形面积的准确值,即定积分的准确值。定义 1.54 将积分区间进行等分,记为,在每个小区间 上用梯形公式求和,得若将所得的近似值记为,整理得 称式为复化梯形公式。记为 当时, 即收敛于如果,则在

20、小区间上,梯形公式的截断误差为 因此因为区间上连续,由介值定理知存在,使得从而有 这就是复化梯形公式的截断误差。下面讨论复化梯形公式的数值稳定性。设计算函数值时产生的误差为,则用式计算结果的误差为因此,无论为多大,复化梯形公式都是稳定的。二、复化辛浦生求积公式如果用分段二次插值函数近似被积函数,即在小区间上用simpson公式计算积分近似值,就可导出复化simpson公式。定义1.65 将积分区间分成等分,分点为, 在每个小区间上。用simpson公式求积分,则有 求和得 整理后得到 式就称为复化辛浦生求积公式。记为 如果, 则由simpson插值余项公式可得复化公式的截断误差为 因为为连续,

21、故存在, 使得代入上式得 式表明,步长h越小,截断误差越小。与复化梯形公式的分析相类似,可以证明,当时,用复化simpson公式所求得的近似值收敛于积分值,而且算法具有数值稳定性。三、复化科特斯求积公式定义1.7 将积分区间等分为个子区间,每个子区间的中点,,子区间长度, 在每个子区间上用科特斯公式求和,得 式就称为复化科特斯求积公式,记为 ,式中, , 类似地可以推出复化科特斯公式的截断误差为 第三节 本章小结本章节开篇介绍了数值求积公式的构造,主要是用运用插值多项式。接着介绍了几个低次的牛顿-科特斯求积公式,即梯形公式、辛浦生公式、科特斯公式,以及牛顿-科特斯求积公式的改进复化求积公式,并

22、对各个求积公式进行了相应的误差分析。第二章 高精度数值积分算法复化求积公式是提高精确度的一种行之有效的方法,但是在使用复化型求积公式之前必须先给出步长。步长太大精度难以保证,步长太小则又会导致计算量的增加,而事先给出一个合适的步长往往是困难的。在实际计算中常常采用变步长的计算方法,即在步长逐次减半的过程中,反复利用复化求积公式进行计算,并同时查看相继两次计算结果的误差是否达到要求,直到所求得的积分值满足要求为止。下面以梯形公式为例第一节 梯形法的递推在变步长的过程中探讨梯形法的计算规律如下:设将积分区间分为等分,则一共有个等分点,这里用表示复化梯形法求得的积分值,其下标表示等分数。由余项公式可

23、知,积分值为 再将各子区间分半,使得区间成等分。此时所得积分近似值记为,则再由余项公式可知,积分值为 假定在上变化不大,即有,于是得,左式也可以写成为 这说明用作为积分的近似值时,其误差近似为。计算过程中常用是否满足作为控制计算精度的条件。如果满足,则取作为的近似值;如果不满足,则再将区间分半,直到满足要求为止。实际计算中的递推公式为 在给定控制参数后,当满足时,则以作为积分的近似值。通过类似的推导,还可以得到下面的结论对于辛浦生公式,假定在上变化不大,则有 对于科特斯公式,假定在上变化不大,则有 第二节 龙贝格求积公式梯形法的算法简单,单精度低,收敛的速度缓慢。如何提高收敛速度以节省计算量,

24、这是人们极为关心的课题。由此引出了龙贝格公式。由梯形的递推法可以看出,将积分区间等分时,用复化梯形公式计算的结果作为积分的近似值,其误差近似值为。可以设想,如果用这个误差作为的一种补偿,即将 作为积分的近似值,可望提高其精确度。直接根据复化求积公式,不难验证 这说明,将区间对分前后两次复化梯形公式的值,按式作线性组合恰好等于复化辛浦生公式的值,它比更接近于近似值。同样,根据式用于作线性组合会得到比更精确的值,且通过直接验证可得 再由式用与作线性组合,又可得到比更精确的值,通常记为,即 式就称为龙贝格求积公式2。上述用若干个积分近似值推算出更为精确的积分近似值的方法,称为外推方法。我们将序列,和

25、分别称为梯形序列、辛浦生序列、科特斯序列和龙贝格序列。由龙贝格序列当然还可以继续进行外推,得到新的求积序列。但由于在新的求积序列中,其线性组合的系数分别为与。因此,新的求积序列与前一个序列结果相差不大。故通常外推到龙贝格序列为止。利用龙贝格序列求积的算法称为龙贝格算法。这种算法具有占用内存少、精确度高的优点。因此,成为实际中常用的求积方法。下面给出龙贝格求积算法的计算步骤:第1步:算出和的值,根据公式计算;第2步:将分半,算出后,根据公式 计算,再根据公式计算;第3步:再将区间分半,算出及的值,并根据公式和计算出及,再由公式计算出;第4步:将区间再次分半,计算,并由公式 计算;第5步:将区间再

26、次分半,类似上述过程计算,。重复上述过程可计算得到,一直算到龙贝格序列中前后两项之差的绝对值不超过给定的误差限为止。定义2.16 上述用若干个积分近似值算出更精确的积分近似值的方法,称之为外推法。上述计算步骤也可用表 2.1表示 表 2.1 龙贝格计算步骤表k梯形序列辛浦生序列科特斯序列龙贝格序列012345第三节 高斯求积公式前面介绍的个节点的 newton -cotes求积公式,其特征是节点是等距的。这种特点使得求积公式便于构造,复化求积公式易于形成。但同时也限制了公式的精度。是偶数时,代数精度为,是奇数时,代数精度为;我们知道个节点的插值型求积公式的代数精确度不低于。设想:能不能在区间上

27、适当选择个节点 使插值求积公式的代数精度高于?答案是肯定的,适当选择节点,可使公式的精度最高达到,这就是本节所要介绍的高斯型求积公式。例:其中,固定在,可以适当选取,只有两个自由度,得到的是梯形公式,其代数精度只有1。如果对求积节点也进行适当的选取,将有四个自由度,得到如下公式:这个积分公式的代数精确度为3,这就是高斯型求积公式,上面的求积节点称为高斯点。一、高斯型求积公式和高斯点 对于含有个参数,的求积公式:,适当选取这个参数,可以使得数值积分公式的代数精确度达到,我们称这一类求积公式为高斯型求积公式,称这类求积公式的积分节点为高斯点,系数称为高斯系数。定义 2.27 如果个求积节点的求积公

28、式的代数精度为,则这个求积节点称为高斯点。因为高斯求积公式也是插值型求积公式,故有结论 :个节点的插值型求积公式的代数精度,满足二、高斯点的特征定理 2.17 设是个相异点,以这个点为零点的次多项式为则是高斯点的充要条件是对于任意不超过次的多项式,成立证明 1)必要性。设为高斯点,则对任意不超过次的多项式,均有,则对于任意次数不超过次多项式,是次数不超过的多项式,且注意到,故 2)充分性。设对于一切次数不超过次的多项式,成立,又设是次数不超过次的多项式,用去除,商,余,即,可知和均是不超过次的多项式,从而,又因求积公式是插值多项式的构造导出的,由的选取,其代数精确度可以达到,而是次数不超过次的

29、多项式,因此成立,因,所以,故而也即由于是次数不超过次的多项式,因此该积分公式的代数精确度至少为,因而由定义2.2知节点是高斯点。定义2.3 对于关系,我们称之为正交性,即与任意次多项式正交,而这样的多项式类称为正交多项式。三、高斯型求积公式的余项其中,。积分,可以计算得到 第四节 高斯-勒让德求积公式常用的高斯型求积公式有高斯-勒让德公式、高斯-切比雪夫公式、高斯-拉盖尔公式、高斯-埃尔米特公式,下面着重介绍高斯-勒让德公式一、legendre多项式, 称式为勒让德(legendre)多项式,其具有前面提到的正交性性质,即对于任意次数不超过的多项式,成立因此,多项式的零点就是相应的高斯-勒让

30、德求积公式的高斯点。勒让德多项式的前几项如下:,勒让德多项式的性质:性质1 勒让德多项式的首项系数为 性质 2 当为奇数时,为奇函数;当为偶数,为偶函数性质 3 对一切次数不高于次的多项式,有二、高斯-勒让德求积公式1)当时,其零点为,易得,的高斯-勒让德求积公式是,其代数精确度为12)当时,其零点为,此时,的高斯-勒让德求积公式是:,其代数精确度为3 3)当时,其零点为和0,设高斯-勒让德求积公式为:令,得到方程 令,得到方程 令,得到方程 联立方程、可解得,所以,其代数精确度为5 4)当时,由,得,故四个零点为,即,相应的,可以解出, ,高斯-勒让德求积公式为其代数精确度为7综上,高斯-勒

31、让德求积公式的积分节点和积分系数表如 表2.2表2.2 积分节点和积分系数表三、高斯-勒让德求积公式的余项 对阶求积公式(共有个求积节点) 其中,为多项式的零点。积分,可以计算得到: 四、一般区间上的高斯-勒让德求积公式前面讲解的高斯-勒让德求积公式是计算标准区间上的定积分,对于一般的有界区间上的定积分,可以通过变量代换转化为区间的定积分。即在积分中,令,当时,;当时,;且。这个变换为线性变换,其反变换为于是成立然后,我们可以用区间上的高斯-勒让德求积公式。第五节 复化两点高斯-勒让德求积公式本节对两点公式 进行推广和复化,得到了新的数值积分公式 同时分析了它的积分误差和收敛阶定义 2.48

32、设,是一种复化求积公式,若当时成立 则称求积公式是阶收敛的。例如,复化的trapezoid公式和复化的simpson公式分别具有二阶和四阶收敛性。定理 2.28 设,则复化两点高斯-勒让德求积公式为 的余项表达式为 该方法具有四阶收敛性。考虑积分,准确解为 0.74684204用复化两点高斯-勒让德公式可求得=0.74680332 ,其绝对误差为=0.00001960,与复化梯形公式,复化simpson公式以及原两点gauss-legendre 公式相比,这里构造的复化两点高斯-勒让德求积公式方法在运算量和精度方面都有显著的改善。第六节 本章小结本章主要介绍了精确度比较高的两种数值求积公式,即

33、龙贝格求积公式和高斯型求积公式,对其进行了相应的误差分析。其中高斯型求积公式主要介绍了高斯-勒让德求积公式,并对两点高斯-勒让德求积公式进行了复化。第三章 各种求积公式的matlab编程实现与应用matlab是由mathworks公式开发的一种主要用于数值计算及可视化图形处理的工程语言,是当今最优秀的科技应用软件之一。它将数值计算、矩阵运算、图形图像处理、信号处理和仿真等诸多强大的功能集成在较易使用的交互计算机环境中,为科学研究、工程应用提供了一种功能强、效率高的编程工具。下面我们将各种求积算法通过matlab软件编程实现,以下程序均用matlab7.0编写,运行坏境:1、硬件环境cpu(in

34、tel core i3-2310m,2.1ghz),内存(2gb昱联),2、软件环境windows7(32位)操作系统。以下总共编写了六个算法程序,部分代码参考文献10-13,为了体现程序的正确性,以下程序都以为例进行运算。原积分的精确值为第一节 几个低次牛顿-科特斯求积公式的matlab实现先用m文件定义一个名为f1.m的函数:% i是要调用第几个被积函数g(i),x是自变量function f=f1(i,x) g(1)=sqrt(x);if x=0 g(2)=1;elseg(2)=sin(x)/x;endg(3)=4/(1+x2);f=g(i);程序一:function c,g=ncote

35、s(a,b,n,m)% a,b分别为积分的上下限;% n是子区间的个数;% m是调用上面第几个被积函数;% 当n=1时计算梯形公式;当n=2时计算辛浦生公式,以此类推; i=n; h=(b-a)/i; z=0;for j=0:i x(j+1)=a+j*h; s=1; if j=0 s=s; elsefor k=1:j s=s*k;endendr=1;if i-j=0 r=r;elsefor k=1:(i-j) r=r*k;endendif mod(i-j),2)=1 q=-(i*s*r);else q=i*s*r;endy=1;for k=0:i if k=j y=y*(sym(t)-k);

36、endendl=int(y,0,i);c(j+1)=l/q; z=z+c(j+1)*f1(m,x(j+1);endg=(b-a)*z1)当输入,时,即在matlab命令窗口输入 ncotes(0,1,1,2)即可得用梯形公式的积分值和相应科特斯系数 如图3.12)当输入,时,即在matlab命令窗口输入 ncotes(0,1,2,2)即可得用辛浦生公式的积分值和相应科特斯系数如图3.23)当输入,时,即在matlab命令窗口输入 ncotes(0,1,4,2)即可得用科特斯公式的积分值和相应科特斯系数如图3.3图 3.1 图 3.2 图3.3第二节 复化求积公式的matlab实现一、复化梯形求

37、积公式的matlab实现通过的个等步长节点逼近积分其中,。程序二:function s=trapr1(f,a,b,n)% f是被积函数;% a,b分别为积分的上下限;% n是子区间的个数;% s是梯形总面积;h=(b-a)/n;s=0;for k=1:(n-1) x=a+h*k; s=s+feval(f,x);endformat long s=h*(feval(f,a)+feval(f,b)/2+h*s;先用m文件定义一个名为f.m的函数:function y=f(x)if x=0 y=1;else y=sin(x)/x;end在matlab命令窗口中输入 trapr1(f,0,1,4) 回车

38、得到 如图3.4 图 3.4若取子区间的个数在matlab命令窗口中输入 trapr1(f,0,1,8) 回车得到 如图3.5 图3.5二、 复化辛浦生求积公式的matlab实现程序三:function s=simpr1(f,a,b,n)% f是被积函数;% a,b分别为积分的上下限;% n是子区间的个数;% s是梯形总面积,即所求积分数值;h=(b-a)/(2*n);s1=0;s2=0;for k=1:n x=a+h*(2*k-1); s1=s1+feval(f,x);endfor k=1:(n-1) x=a+h*2*k; s2=s2+feval(f,x);ends=h*(feval(f,a

39、)+feval(f,b)+4*s1+2*s2)/3;先用m文件定义一个名为f.m的函数:function y=f(x)if x=0 y=1;else y=sin(x)/x;end在matlab命令窗口中输入 simpr1(f,0,1,4)回车得到 如图3.6图3.6若取子区间个数时在matlab命令窗口中输入 simpr1(f,0,1,8)回车得到 如图3.7图3.7三、 复化科特斯求积公式的matlab实现程序四:function s=cotespr1(f,a,b,n)% f是被积函数;% a,b分别为积分的上下限;% n是子区间的个数;% s是梯形总面积,即所求积分数值;h=(b-a)/n

40、;s1=0;s2=0;s3=0;s4=0;for k=1:n x=a+(4*k-3)*h/4; s1=s1+feval(f,x);endfor k=1:n x=a+(4*k-2)*h/4; s2=s2+feval(f,x);endfor k=1:n x=a+(4*k-1)*h/4; s3=s3+feval(f,x);endfor k=1:(n-1) x=a+4*k*h/4; s4=s4+feval(f,x);ends=h*(7*feval(f,a)+7*feval(f,b)+32*s1+12*s2+32*s3+14*s4)/90;同样先用m文件定义一个名为f.m的函数:function y=f

41、(x)if x=0 y=1;else y=sin(x)/x;end在matlab命令窗口中输入 cotespr1(f,0,1,4)回车得到 如图3.8 图3.8第三节 龙贝格求积公式的matlab实现构造数表来逼近积分其中。表示数表的最后一行,最后一列的值。程序五:function r,quad,err,h=romber(f,a,b,n,delta)% f是被积函数% a,b分别是积分的上下限% n+1是t数表的列数% delta是允许误差% r是t数表% quad是所求积分值m=1;h=b-a;err=1j=0;r=zeros(4,4);r(1,1)=h*(feval(f,a)+feval(

42、f,b)/2while (errdelta)&(jn)|(j romber(f,0,1,5,0.5*(10(-8)回车得到 如图3.9 图3.9第四节 高斯-勒让德求积公式的matlab实现程序六:function a,x=guass1(n) i=n+1; f=(sym(t)2-1)i; f=diff(f,i); t=solve(f); for j=1:i for k=1:i x(j,k)=t(k)(j-1); end if mod(j,2)=0 b(j)=0; else b(j)=2/j; end end x=inv(x); for j=1:i a(j)=0; x(j)=0; for k=1

43、:i a(j)=a(j)+x(j,k)*b(k); x(j)=x(j)+t(j); end x(j)=x(j)/k; endfunction g= guasslegendre (a,b,n,m)% a,b分别是积分的上下限;% n+1为节点个数;% m是调用f1.m中第几个被积函数; a,x=guass1(n);g=0;for i=1:n+1 y(i)=(b-a)/2*x(i)+(a+b)/2; f(i)=f1(m,y(i); g=g+(b-a)/2*f(i)*a(i);end用m文件分别把上面两个自定义函数定义为名为guass1.m函数和guasslegendre.m函数用m文件定义一个名为

44、f1.m的函数function f=f1(i,x) g(1)=sqrt(x);if x=0 g(2)=1;elseg(2)=sin(x)/x;endg(3)=4/(1+x2);f=g(i);在matlab命令窗口中输入 guasslegendre (0,1,2,2) guasslegendre (0,1,3,2)回车得到 如图3.10 图3.10第五节 各种求积算法的分析比较例1 分别用不同的方法计算积分,并作比较。下面用各种求积公式分别计算积分,并给出了相应的计算误差,进行比较,结果如下:1、用newton-cotes公式当n=1时,即用梯形公式,用程序一 在matlab命令窗口中输入 nc

45、otes(0,1,1,2) 得0.92703549240395 0.01904757796323当n=2时, 即用simpson公式,用程序一在matlab命令窗口中输入 ncotes(0,1,2,2)得0.94614588227359 0.000062811906407当n=4时, 即用科特斯公式,用程序一在matlab命令窗口中输入 ncotes(0,1,4,2)得0.94608300406367 0.0000000663035132、用复化梯形公式 令h=1/8=0.125,用程序二在matlab命令窗口中输入 trapr1(f,0,1,8),得=0.94569086352700.000

46、3922068401823、用复化辛浦生公式 令h=1/8=0.125,用程序三在matlab命令窗口中输入 simpr1(f,0,1,8),得 =0.94608308538495 0.000000015017767 4、用romberg公式 ,用程序五在matlab命令窗口中输入 romber(f,0,1,5,0.5*(10(-8),得0.94608307036718 0.0000000000000025、用高斯-勒让德求积公式, 令,(1) 用2个节点的gauss公式0.94604115827633(2) 用3个节点的gauss公式,用程序六在matlab命令窗口中输入 guasslege

47、ndre (0,1,2,2),得0.946083134078473 0.000000063711290算法比较n 此例题的精确值为0.946083070367183n 由例题的各种求积算法可知:n 对newton-cotes公式,当n=1时只有1位有效数字,当n=2时有3位有效数字,当n=4时有7位有效数字。n 对复化梯形公式有2位有效数字,对复化辛浦生公式有7位有效数字。n 用复化梯形公式,对积分区间二分了11次用2049个函数值,才可得到7位准确数字。n 用romberg公式对区间二分3次,用了9个函数值,能得到同样的结果;二分4次,用了14个函数值,却能得到14位有效数字。n 用高斯-勒让德求积公式仅用了3个函数值,就能得到同样比较精确的6位有效数字。第六节 本章小结本章主要对各种求积算法,即牛顿-科特斯、复化求积、龙贝格、高斯-勒让德求积公式的算法在计算机上运用matlab软件进行编程实现,从而简化了运算。并且通过实例计算,误差分析对各种求积公式进行了分析比较。结 论本文主要讨论了数值积分的计算方法并通过matlab软件编程实现,通过前面的研究我们知道求数值积分近似值的计算方法很多,包括newton-cotes求积公式

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论