《2022年数值积分常用算法设计与实现资料》由会员分享,可在线阅读,更多相关《2022年数值积分常用算法设计与实现资料(21页珍藏版)》请在金锄头文库上搜索。
1、毕 业论文题目数值积分常用算法设计与实现学生* 指导教师* 教授年级2005级专业计算机科学与技术系别计算机系学院计算机科学技术与信息工程学院* 2019 年 06 月名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 21 页 - - - - - - - - - 1 论文提要本文应用插值积分法和逼近论的思想,简单重述了推导复化梯形公式、复化Simpson公式和 Newton-Cotes 公式的过程,以及这三个公式的系数、精度等问题。并以这两种数值积分的求解方法为基础,应用q
2、uad、guass 函数编写具体Matlab 程序,通过计算机软件计算出所给题目的近似数值积分。对三者所得的结果进行比较,从而研究了用梯形公式、Simpson 公式和 Newton-Cotes 公式求积分的方法和三者的精确度问题。得知:梯形公式的代数精度虽然比较低, 但它对函数的光滑性要求也比较低,特别是当被积函数是周期函数时,梯形公式是较理想的方法。Simpson 公式具有较高的代数精度,且程序设计也比较简单,因此是使用比较广泛的一种方法。但应当指出, 不能指望通过无限增加区间的等分数n 来提高数值积分的精确度。而且, 当等分数n 不恰当的增大时,梯形公式和Simpson 公式的计算结果都很
3、差。 这两种求积公式所得的结果在精度上的确存在差异,结合理论部分更加充分地说明了, n 相同时比Newton-Cotes 公式具有更高的代数精度,但当代数精度相同时,三者之间计算的结果仍存在细微的差异。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 21 页 - - - - - - - - - 2 数值积分常用算法设计与实现 *摘 要 :在数值分析中,给定函数的定积分的计算不总是可行的。许多定积分不能得到精确值的实际问题可以利用数值积分求解。本文应用插值积分法和逼近论的思
4、想,构造一个简单函数p(x) 近似表示 f(x),然后对 p(x)求积分得到 f(x)的积分的近似值。基于插值原理,推导出数值积分的基本公式。利用Matlab 程序设计实现,进而对三大公式运算结果进行分析以及进一步认识。关键字: 插值积分、代数精度、插值型求积公式、复化梯形公式、复化辛普森公式、Newton-Cotes 公式。1、数值积分简介:在数值分析中,数值积分是计算定积分数值的方法和理论。在数学分析中,给定函数的定积分的计算不总是可行的。许多定积分不能用已知的积分公式得到精确值。另外, 许多实际问题中的被积函数往往是列表函数或其他形式的非连续函数,对这类函数的定积分,也不能用不定积分方法
5、求解。由于以上原因, 数值积分的理论与方法一直是计算数学研究的基本课题。 数值积分是利用黎曼积分等数学定义,用数值逼近的方法近似计算给定的定积分值。借助于电子计算设备,数值积分可以快速而有效地计算复杂的积分。对微积分学作出杰出贡献的数学大师,如牛顿、. 欧拉、高斯等人也在数值积分这个领域作出了各自的贡献,并奠定了它的理论基础。1、1 数 值积分公式一般是形如的近似公式,又称求积公式,xj和Aj(i=0,1, ,m) 分别称为求积结点和求积系数,通常jxa,b,式(2) 右端称为求积和;两端之差imiibaxfAdxxfxfE1称为求积余项或求积误差;区间 ,b可以是有限的或无限的。构造求积公式
6、的问题就是确定xj 和Aj 使得E(?) 在某种意义下尽可能地小。1、2 代 数精度若公式imiibaxfAdxxfxfE0对 ?(x)xk(k=0,1,d) 精确成立,亦即名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 21 页 - - - - - - - - - 3 E(?)=0 ,而当? (x)=x时该公式不再是确等式,则说该公式的代数精度是d。根据 K.外尔斯特拉斯的多项式逼近定理, 就一般的连续函数 ?而言,d 越大 E(?) 越小,因此可以用代数精度的高低说明
7、求积公式的优劣。1、3插 值型 求积公式通过插值途径构成的求积公式。用?(x) 的以x0,x1, ,xm为结点的插值多项式公式公式公式近似替代?(x) 后, 经过积分可以得到形如(2) 的插值型求积公式,其中求积系数公式特别,若所有的xj 都属于 a,b,则称它为内插型求积公式。这是一类最基本的求积公式。由于 m+1个结点的插值型求积公式的代数精度至少是m,所以具有一定代数精度的求积公式总是存在的。2 三大常用数值积分公式推导2.1 复化梯形公式以及复化辛普森公式的推导:在区间 a,b不大时 , 用梯形公式、 辛卜生公式计算定积分是简单实用的, 但当区间 a,b较大时,用梯形公式、Simpso
8、n 公式计算定积分达不到精确度要求. 为了提高计算的精确度,我们将 a,b 区间 n 等分,在每个小区间上应用梯形公式、Simpson 公式计算定积分, 然后将其结果相加,这样就得到了复化梯形公式和复化Simpson 公式。2.11 . 复化梯形公式将积分区间 a,b 做 n 等分 , 设nn1, 则节点为对每个小区间上应用梯形公式, 然后将其结果相加,则得名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 21 页 - - - - - - - - - 4 以上公式则为 复化
9、梯形公式当在a,b上有连续的二阶导数时,则复化梯形公式的余项推导如下:因为所以在区间 a,b 上公式 (3.14)的误差为又因为在区间 a,b 上连续,由连续函数的性质知,在区间a,b上存在一点,于是称上式为 复化梯形公式的余项。2.12 复化 Simpson 公式与复化梯形公式类似, 可以推导出复化Simpson 公式 . 不同之处在于将区间ba,分为等分 , 对每个小区间应用 Simpson 公式 , 然后相加 , 则得称为 复化 Simpson 公式名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - -
10、- - - - 第 5 页,共 21 页 - - - - - - - - - 5 当在a,b上有连续的四阶导数时,则复化辛卜生公式( 的余项推导如下:在区间ba,上辛卜生公式的误差已知为所以,在区间ba,上公式的误差为又因为在a,b上连续 , 由连续函数的性质知,在区间a,b 上存在一点,于是称上式为 复化 Simpson 公式的余项2.21Newton Cotes 公式的推导当 1.1 插值求积公式的插值节点为等距节点时,就得到NewtonCotes 公式。将区间 a,bn等分,bahn,n+1 个节点为xk=a+kh (k=0,1,n) 在节点上对f(x) 的 Lagrange 插值多项式
11、是:00( )()()nnjnkkjkjjkxxpxf xxx用 Pn(x)代替 f(x) 构造求积公式:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 21 页 - - - - - - - - - 6 00( )()()nnbbjnnkaakjkjjkxxIpx dxfxdxxx记错误!未找到引用源。,错误!未找到引用源。(k=0,1,n) 作代换 x=a+th 带入上式,变为:()00()nnnnkkjjkbatjAdtba Cnkj其中: 错误!未找到引用源。 (k
12、=0,1,n) (1-1 )这个积分是有理多项式积分,它与被积函数f(x)和区间 a,b无关。只要确定n 就能计算出系数 错误!未找到引用源。于是得到称为NewtonCotes 公式的求积公式:()0()nnnkkkIbaCy(1-2)其中 错误!未找到引用源。称为 NewtonCotes 系数。如表1 所示。表 1 NewtonCotes 系数n 1 1/2 1/2 2 1/6 4/6 1/6 3 1/8 3/8 3/8 1/8 4 7/90 32/90 12/90 32/90 7/90 5 19/288 25/96 25/144 25/144 25/90 19/288 6 41/840 9
13、/35 9/280 34/105 9/280 9/35 41/840 2.22NewtonCotes 公式误差和稳定性在积分公式中用插值多项式Pn(x) 代替 f(x)的插值误差是(1)0()( )( )( )()(1)!nnnnkkfRxfxpxxxn因此, NewtonCotes 公式的截断误差是名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 21 页 - - - - - - - - - 7 (1)0()()()(1)!nnbkakfRfxxdxn(1-3)讨论舍入误
14、差对计算结果产生的影响,设(1-2 )式近似计算()bafx dx其中计算函数值f(xn)有误差值 错误!未找到引用源。 (k=0,1,2, ,n ) 。在( 1-2 )式中令错误!未找到引用源。错误!未找到引用源。设计算 错误!未找到引用源。无误差,舍入误差也忽略,则,由(1-2 )式计算时 错误!未找到引用源。引式的误差为()()()()0000()()()()(.)nnnnnnnkkkknnnkkebaCfxCfxbaCC如果皆为正,并设 错误!未找到引用源。,则 错误!未找到引用源。,故 错误!未找到引用源。 有界,即引起的误差受控制,不超过()ba倍。保证了数值计算的稳定性。但当 n
15、8 时,将出现负数,这时,数值计算的稳定性不能保证,所以节点超过8 时NewtonCotes 公式不能用。当 n 为偶数时, NewtonCotes 积分公式具有n+1 次代数精度。2.23 经典 Newton Cotes 公式当 n=4,5 点公式称为经典NewtonCotes 公式01234()()00(7()32()12()32()7()90()()()1,()11nnnnkknkknkkkbaCfxfxfxfxfxyfxIbaCy RfxpxC其中 错误!未找到引用源。 (k=0,1,4) ,它具有 5 次代数精度。3、实例运算应用与分析3.1 数值分析举例名师资料总结 - - -精品
16、资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 21 页 - - - - - - - - - 8 .2,12,1 ,0,13212410210,21,2,1 ,0,21 ,011.,1 ,0,121010,1,1 ,0,1 ,0,12,122210111110nnieenenjyyyniyhhnjjhtnSimpsonnieenenjyyyniynhnjjhtnetyetfeestkedssyeetynininjnnnnjnininjnnnnjttttt得离散方程等分公式,将用复化得离散方程等分用复
17、化梯形公式,将是它的唯一解。,易见记积分方程为3.2 程序设计流程图分别利用复化梯形公式、复化Simpson 公式、牛顿 - 科特斯公式对题目求解,并做出流程设计图如下开始0.0 LowLimit1 0.0 UpLimit1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 21 页 - - - - - - - - - 9 图 1 复化梯形和复化辛普森公式流程图输入 LowLimit1 tixing1.SetV alue(LowLimit1,UpLimit1);/ 梯形赋值
18、输出请输入积分下限xinpusheng1.SetValue(LowLimit1,UpLimit1);/ 辛浦生赋值输入 UpLimit1 输出积分结果:梯形tixing1.Result() 输出积分结果: 辛浦生xinpusheng1.Result() 输出 f(x)=e(-x) 请输入积分上限结束开始名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 21 页 - - - - - - - - - 10 是否是否图 2 牛顿 - 科特斯公式流程设计图用 Matlab 编程计
19、算,和真解比较误差,结果看下三表,(程序附后。)表 1 复化梯形公式,y(t)- y n (t) 输 出Input the xi(16): I=15 i=0 h=0.2 f=0 输入 ai NC(a,h,n,&r,f) ntfntf= =0输出 R=r输 出 Wrong!Return code=ntf 结束i+1 i 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 21 页 - - - - - - - - - 11 表 2 复化 Simpson 公式,y(t)- y n
20、 (t) 表 3 Newton Cotes 公式,y(t)- y n (t) 比较表 1 和表 2 和表 3 可以看出,用复化 Simpson 公式离散比复化梯形公式离散得到结果的精度明显高出很多,这和复化Simpson 公式的代数精度比复化梯形公式高是一致的。对于 Newton Cotes 公式来说随着n 值的增大其结果精确度也就越高,但不是越大越精确,一般来说n=4 最为适合。4、结论一般情况下可以采用复化梯形公式,复化 Simpson 公式和 Newton Cotes公式离散积分方程求得近似解,采用复化梯形公式和复化Simpson公式的结果可以进一步外推提高精度。在不要求很高精度(1.0
21、e-10 )的时候, 采用复化梯形公式相对较为简单,尤其是当被积函数是周期函数时,由于梯形公式对函数的光滑性要求比较低所以梯形公式是较理想的方法。复化 Simpson 公式, 具有较高的代数精度,且程序设计也比较简单,因此是使用比较广泛的名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 21 页 - - - - - - - - - 12 一种方法,但取点相对较多。 NewtonCotes公式具有较高的代数精度,但由于 NewtonCotes积分是通过拉格朗日多项式插值变化
22、而来的,我们都知道高次多项式插值会出现Runge 振荡现象,因此会导致高阶的Newton Cotes公式不稳定。由于计算机舍入误差的存在,NewtonCotes 公式的节点不能无限制增加,从而限制了精度的提高,只能采用复化梯形公式或复化Simpson 公式或它们的外推,通过增加节点个数提高精度使达到所需要的精度。5、结束语通过本次设计,我更进一步地了解了复化梯形公式、复化Simpson 公式、牛顿科特斯公式在求解定值函数积分及一些实际问题上的应用,尤其是对实例进行程序设计方法上有了更深的理解。 在书本上学习有关进程的同步的问题只是理论上的说法,并没有一个实际的东西, 至少应是看得见的,对其含义
23、也只是处于表面上的理解。这次实验我才体会到进程同步的真正涵义。在本论文完成之际,我要向所有帮助过我的老师、同学表示衷心的感谢!我要特别感谢我的指导老师* 老师的热情关怀和悉心指导。在我撰写论文的过程中,*老师他给予了殷切的指导,提出了许多宝贵的意见。无论是在论文的选题、构思和资料的收集方面,还是在论文的研究方法以及成文定稿方面,我都得到了*老师悉心细致的教诲和无私的帮助, 特别是他广博的学识、严谨的治学精神和一丝不苟的工作作风使我受益匪浅,在此表示真诚地感谢和深深的谢意。参考文献:1 王世儒、王金金、冯有前:计算方法(第二版) ,西安电子科技大学出版社。2 王正林、刘明: 精通 Matlab7
24、. , 北京 : 电子工业出版社, 2006.7。3 李庆扬:数值分析(第四版) ,华中科技大学出版社。附录,程序1.1复化梯形公式和复化Simpson公式 MATLAB 实现#includeiostream.h #includemath.h class tixing /梯形类名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 21 页 - - - - - - - - - 13 public: tixing();/初始化 void SetValue(double LowLi
25、mit1,double UpLimit1);/设置积分上下限值 double f(double x);/函数 f(x) virtual double Result(void);/积分结果 , 虚函数 virtual void wucha(void);/误差范围 , 虚函数protected: double LowLimit;/上限 double UpLimit;/下限; tixing:tixing() LowLimit=0.0;/初始值 UpLimit=0.0; void tixing:SetValue(double LowLimit1,double UpLimit1)/设置函数 LowLim
26、it=LowLimit1; UpLimit=UpLimit1; double tixing:f(double x) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 21 页 - - - - - - - - - 14 return exp(-x);/本例 f(x)为 e(-x) double tixing:Result(void) return (UpLimit-LowLimit)/2*(f(LowLimit)+f(UpLimit);/梯形公式 void tixing:w
27、ucha(void) double x; x=-pow(UpLimit-LowLimit),3)/12*(-f(LowLimit);/梯形误差公式 cout梯形公式误差范围=xendl; class xinpusheng:public tixing/辛浦生类 , 从梯形继承public: virtual double Result(void);/对结果重新定义( 因为公式不同) virtual void wucha(void);/同上 , 对误差重新定义; double xinpusheng:Result(void)/结果 return (UpLimit-LowLimit)*(f(LowLim
28、it)+4*f(LowLimit+UpLimit)/2.0)+f(UpLimit)/6.0; void xinpusheng:wucha(void)/误差 double x; x=-pow(UpLimit-LowLimit),5)/2880*(-f(LowLimit); coutwucha:; if (x0) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 21 页 - - - - - - - - - 15 x=-x; cout辛浦生公式误差范围=:xendl; int
29、 main(void) double LowLimit1=0.0,UpLimit1=0.0; tixing tixing1;/梯形对象 xinpusheng xinpusheng1;/辛浦生对象 coutf(x)=e(-x)endl; coutUpLimit1; coutLowLimit1; tixing1.SetValue(LowLimit1,UpLimit1);/梯形赋值 xinpusheng1.SetValue(LowLimit1,UpLimit1);/辛浦生赋值 cout积分结果 : 梯形 tixing1.Result()endl; tixing1.wucha(); cout积分结果
30、: 辛浦生 xinpusheng1.Result()endl; xinpusheng1.wucha(); return 0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 21 页 - - - - - - - - - 16 / 计算方法 , 数值分析中的梯形积分公式, 辛浦生积分公式, 简称梯形公式, 辛浦生公式求函数 f(x)=e(-x)在积分上下限 / / 为 10 的范围内的积分, 并算出了各自算法的误差. / 下面是对上面的代码简化#includeiostre
31、am.h #includemath.h double f(double x) return exp(-x);/本例 f(x)为 e(-x) double tixingResult(double UpLimit,double LowLimit) return (UpLimit-LowLimit)/2*(f(LowLimit)+f(UpLimit);/梯形公式 void tixingwucha(double UpLimit,double LowLimit) double x; x=-pow(UpLimit-LowLimit),3)/12*(-f(LowLimit);/梯形误差公式 cout梯形公式
32、误差范围=xendl; double xinpushengResult(double UpLimit,double LowLimit)/结果 return (UpLimit-LowLimit)*(f(LowLimit)+4*f(LowLimit+UpLimit)/2.0)+f(UpLimit)/6.0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 21 页 - - - - - - - - - 17 void xinpushengwucha(double UpLimi
33、t,double LowLimit)/误差 double x; x=-pow(UpLimit-LowLimit),5)/2880*(-f(LowLimit); coutwucha:; if (x0) x=-x; cout辛浦生公式误差范围=:xendl; int main(void) double LowLimit,UpLimit; coutf(x)=e(-x)endl; coutUpLimit; coutLowLimit; cout积分结果 : 梯形 tixingResult(UpLimit,LowLimit)endl; tixingwucha(UpLimit,LowLimit); cout
34、积分结果 : 辛浦生 xinpushengResult(UpLimit,LowLimit)endl; xinpushengwucha(UpLimit,LowLimit); return 0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 21 页 - - - - - - - - - 18 1.2 NewtonCotes 公式 MATLAB程序实现C/C+ code #include #include int NC(a,h,n,r,f) float (*a); floa
35、t h; int n,f; float *r; int nn,i; float ds; if(n1000|n2) if (f) printf(n Faild! Check if 1n1000!n,n); return(-1); if(n=2) *r=0.5*(*a)0+(*a)1)*(h); return(0); if (n-4=0) *r=0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 21 页 - - - - - - - - - 19 *r=*r+0.375*
36、(h)*(*a)n-4+3*(*a)n-3+3*(*a)n-2+(*a)n-1); return(0); if(n/2-(n-1)/2=0) nn=n; else nn=n-3; ds=(*a)0-(*a)nn-1; for(i=2;inn) *r=*r+0.375*(h)*(*a)n-4+3*(*a)n-3+3*(*a)n-2+(*a)n-1); return(0); main() float h,r; int n,ntf,f; int i; float a16; printf(Input the xi(16):n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - -
37、 - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 21 页 - - - - - - - - - 20 for(i=0;i=15;i+) scanf(%d,&ai); h=0.2; f=0; ntf=NC(a,h,n,&r,f); if(ntf=0) printf(nR=%fn,r); else printf(n Wrong!Return code=%dn,ntf); getch(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 21 页 - - - - - - - - -