一个通用数值积分的matlab实现(带附录).doc_第1页
一个通用数值积分的matlab实现(带附录).doc_第2页
一个通用数值积分的matlab实现(带附录).doc_第3页
一个通用数值积分的matlab实现(带附录).doc_第4页
一个通用数值积分的matlab实现(带附录).doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

学校代码: 11059 学 号:1107011027 Hefei University 毕业论文(设计)BACHELOR DISSERTATION 论文题目: 一个通用数值积分的MATLAB实现 学位类别: 理学学士 学科专业: 信息与计算科学 作者姓名: 黄 凯 导师姓名: 段 敏 完成时间: 2015年5月20 日 一个通用数值积分的MATLAB实现摘 要当我们在现实生活和学习研究中需要运用积分来解决某些问题的时候,我们常常会因为这个积分是否能求出精确解以及积分求解的难易程度而感到苦恼。虽然数值积分中巧妙的利用积分中值定理利用各种算法可以近似的求出积分的近似解,但是往往利用单一公式求出的解精确度不是很高,如果要提高精度就涉及到公式的复化问题。在复化公式中我们采用多区间逐步逼近的方法可以让计算结果更加接近精确值,但这样我们的计算量也会跟着加大。Matlab的出现虽然将人们从繁复的计算中解放出来,但若要利用matlab来解决问题就会涉及到matlab编程问题,这会给一般的用户带来很大困难。虽然在各个文献中数值积分的各个公式的matlab程序已屡见不鲜,但终究都是零散单一的对单个公式的编程,没有统一的通用数值积分程序。本文通过对数值积分的各种算法如:矩形公式、梯形公式、牛顿-柯茨公式等以及这些公式在matlab中的算法实现的比较,将尝试编写出统一的调用程序。根据问题的实际要求选择性的调用某种算法,这样不仅能将错综复杂的数值积分问题集中化、简单化,更能提高解决问题的效率。所以这篇文章的着重点也就在通用数值积分程序的编写及使用上。关键词:数值积分;方法比较;通用算法A generalnumerical integrationMATLABABSTRACTWhen we are in the real life and learning needs to use integral to solve some problems in the research, we often because the integral is able to find out the exact solution and to the difficulty of the integral solution. Although the clever use of integral mean value theorem in numerical integration using various algorithm can approximate the approximate solution of integral, but tend to use a single formula and the solution accuracy is not high, it involves the formula of complex problems. We used in compound formula range more gradual approximation method can make a more accurate calculation results more close to, but this way we will increase the amount of calculation. Matlab while people will be liberated from the calculation of heavy and complicated, but if you want to use Matlab to solve the problem will involve the Matlab programming problems, it will bring considerable difficulties to the general user. Although in the literature of numerical integration formula matlab has become common, but they were scattered on a single formula of single programming, there is no uniform general numerical integration program.Based on the numerical integration of all kinds of algorithms such as: rectangle formula, the trapezoid formula, Newton - ke, formula, and the comparison of these formulas in the matlab algorithm, will try to write a unified the caller. Problem according to the actual requirements of selective call some algorithms, such not only can centralizing fault in the complex numerical integration problems, simple, more can improve the efficiency of problem solving. So the emphasis of this article is in writing and using general numerical integral program.KEY WORDS: Numerical integration;Method of comparison;General algorithm目 录第一章 前言11.1研究背景与课题意义1第二章 数值积分几种公式探析22.1 数值积分方法的原理22.2矩形公式22.3梯形公式32.4辛普森公式32.5牛顿-柯茨公式42.6自适应数值积分4第三章Matlab编程程序53.1主程序53.2调试实例53.2.1矩形公式调用实例63.2.2梯形公式调用实例(计算不同等分份数的积分值)73.2.3辛普森公式调用实例83.2.4牛顿-柯茨公式调用实例103.2.5自适应积分调用实例113.3小结12第四章 结语13参考文献14附 录15主程序15致 谢21第一章 前言1.1研究背景与课题意义随着数值积分问题在日常生活中的应用越来越多,人们对数值积分的研究也越来越深。单从美国数学评论的走向来说,从1975年到1979年之间,与数值积分问题有关的文献在美国数学评论上有评论的就有上百份之多。当我们对这些文章做一个比较分析就会看到这些文章有着以下四个共同点即:研究方法的多样性、研究对象的特殊性、研究问题的具体性以及带微商项的积分公式明显增多。另外, Matlab软件的诞生可以说是数学界一个福音,因为matlab是一个功能非常强大的科学计算软件,它是集数值处理、图形处理、图像处理、符号计算、文字处理、数学建模、实时控制、动态逼真、信号处理为一体的数学应用软件。Matlab的出现瞬间将人们从繁重的计算中解放出来,并且利用matlab来计算的准确性往往也会比人工计算的精确度高。因此,利用Matlab来计算数值积分是一种有效的积分数值计算方法,同时也可验证数值积分一般算法的准确性。数值积分的计算方法很多,诸如矩形、梯形、辛普森、牛顿柯斯特、龙贝格、高斯算法等,还有相应的自适应算法。一般是一种算法,编写一个模块,这是常用的思想方法,若能在一个模块中通过输入接口,选择不同的算法,则又前进了一步,MATLAB中的数值积分多数是能完成这种功能的,但能实现更通用的功能,如输入接口中能提供更多的算法选择,更多的要求,如划分节点数,精度要求,是否自适应,耗时等数据,目前尚未有人开展研究。本论文编写出的数值积分通用程序,将达到集成统一的调用方式,这就是本课题研究的目的;其意义在于调用处理模块名称统一,通过选择参数来选择不同的算法处理过程。第二章 数值积分几种公式探析2.1 数值积分方法的原理从公式来看: (1)我们利用积分中值定理得到上面所示的公式,我们所见到的一般的数值积分公式也是由该公式演变而来。当不能求出精确解的时候,我们就只能通过提供不同的近似方法来对求近似解,这样我们就能求出该函数积分的近似解。当然根据不同的近似方法所求出的的近似值与精确值之间的误差也会有所不同。因此我们要根据误差要求选择不同的近似方法。2.2矩形公式当我们取一个点来近似代替的值的时候,就会演变出我们平时常见的矩形公式。当我们用来近似代替的值的时候,就演变成我们平时见到的左矩形公式: (2)当我们用来近似代替的值的时候,就演变成我们平时见到的右矩形公式: (3)当我们用来近似代替的值的时候,就演变成我们平时所见的中矩形公式: (4)根据曲线的走势不同,选择左矩形和右矩形近似求解的时候会呈现偏大或偏小的情况,用中矩形方法来求解相对来说误差会小一点。2.3梯形公式如图2.3.1所示当我们用两个点和的平均值来近似代替的值的时候,就演变成我们平时所见到的梯形公式: (5)图2.3.1梯形公式示意图相对于矩形公式用一个点来近似代替的值来说,梯形公式用两个点的平均值来代替的值,其相对误差要小一点,精确度高一点。2.4辛普森公式当我们选取三个点、和=的值来计算的近似值的时候,我们可以得出辛普森公式: (6)运用辛普森公式近似求出的积分结果相对于矩形公式和梯形公式来说精确度更高一些,但计算方法相对来说也复杂一点。2.5牛顿-柯茨公式当我们选取5个点、来计算的近似值的时候,我们就能得到平时所见到的的牛顿-柯茨公式4: (7)牛顿-柯茨公式相对于前面的几个公式来说,计算误差更小,精度更高,但是计算的复杂程度也更高。2.6自适应数值积分用自适应积分法解决问题的时候,我们往往取非等间距的节点,我们可以在函数值变化较大的区间采用较小的步长进行计算,其基础是辛普森公式(当然我们也可以采用其他的公式来自适应)。计算关键是结果能否通过精度测试。对于自适应积分法来说我们给出不同的精度,我们在进行区间划分的时候所划分的区间分数也会有相应的要求,一般来说划分的区间越小,精度越大(详情见程序调试实例)。第三章Matlab编程程序MATLAB是由MathWorks公式开发的一种主要用于数值计算及可视化图形处理的工程语言,是当今最优秀的科技应用软件之一。它将数值计算、矩阵运算、图形图像处理、信号处理和仿真等诸多强大的功能集成在较易使用的交互计算机环境中,为科学研究、工程应用提供了一种功能强、效率高的编程工具5。在上一章中我们所提到的各种积分公式均是单一的积分公式,如果将这些公式复化(以矩形公式为例,当我们将一段曲线所围成的面积近似看成一个矩形的时候就是单一的矩形公式,而当我们将这段曲线所围成的面积划分成若干个等步长的小矩形的面积的和的时候就是矩形公式的复化),这样计算出来的结果的误差也会随复化程度的增加而减小。但是计算量也会随着等分区间的增多而变大,人工计算花费的时间会比较多,这时我们就可以使用matlab编写程序来代替人工计算。从以往所发表的文章中各种公式的matlab运算程序已经司空见惯,但是都是单一的程序,没有通用的计算程序。本文将在数值积分的通用matlab程序上做一些探索。下面我们将编写通用数值积分的matlab程序,该程序用MATLAB7.0编写,运行坏境:1、硬件环境CPU(intel Core i3-2310M,2.1GHz),内存(2GB昱联),2、软件环境windows7(32位)操作系统。以下编写的算法程序,部分代码参考文献1-3。3.1主程序见附录。3.2调试实例以下调试实例均以求的值为例。3.2.1矩形公式调用实例(一)左矩形输入函数变量:f=inline(1/(1+x*x);f,n=tyszjf(f,0,1,100,zjx)按回车键显示结果如下:f =0.7879n=100(二)右矩形输入函数变量:f=inline(1/(1+x*x);f,n=tyszjf(f,0,1,100,yjx)按回车键显示结果如下:f =0.7829n =100(三)中矩形输入函数变量:f=inline(1/(1+x*x);f,n=tyszjf(f,0,1,100,mjx)按回车键显示结果如下:f =0.7854n =100(四)以中矩形为例计算不同等分份数的积分值(1)10等份(n=10)输入函数变量:f=inline(1/(1+x*x);f,n=tyszjf(f,0,1,10,mjx)按回车键显示结果如下:f=0.7856n =10(2)100等份(n=100)输入函数变量:f=inline(1/(1+x*x);f,n=tyszjf(f,0,1,100,mjx)按回车键显示结果:f =0.7854n =100(3)1000等份(n=1000)输入函数变量:f=inline(1/(1+x*x);f,n=tyszjf(f,0,1,1000,mjx)按回车键显示结果如下:f =0.7854n =10003.2.2梯形公式调用实例(计算不同等分份数的积分值)(一)10等份输入函数变量:f=inline(1/(1+x*x);f,n=tyszjf(f,0,1,10,tx)按回车键显示结果如下:f =0.7850n =10(二)100等份输入函数变量:f=inline(1/(1+x*x);f,n=tyszjf(f,0,1,100,tx)按回车键显示结果如下:f =0.7854n =100(三)1000等份输入函数变量:f=inline(1/(1+x*x);f,n=tyszjf(f,0,1,1000,tx)按回车键显示结果如下:f =0.7854n=10003.2.3辛普森公式调用实例(一)10等份输入函数变量:f=inline(1/(1+x*x);f,n=tyszjf(f,0,1,10,sps)按回车键显示结果如下:f =0.7854n =10(二)100等份输入函数变量:f=inline(1/(1+x*x);f,n=tyszjf(f,0,1,100,sps)按回车键显示结果如下:f =0.7854n =100(三)1000等份输入函数变量:f=inline(1/(1+x*x);f,n=tyszjf(f,0,1,1000,sps)按回车键显示结果如下:f =0.7854n =1000(四)精度要求不同时(1)wc=0.5*10(-7)输入函数变量:f=inline(1/(1+x*x);f,n=tyszjf(f,0,1,n,sps,0.5*10(-7)按回车键显示结果如下:f =0.7854n =100(2)wc=0.5*10(-8)输入函数变量:f=inline(1/(1+x*x);f,n=tyszjf(f,0,1,n,sps,0.5*10(-8)按回车键显示结果如下:f =0.7854n =1003.2.4牛顿-柯茨公式调用实例(一)10等份输入函数变量:f=inline(1/(1+x*x);f,n=tyszjf(f,0,1,10,nc)按回车键显示结果如下:f =0.7854n =10(二)100等份输入函数变量:f=inline(1/(1+x*x);f,n=tyszjf(f,0,1,100,nc)按回车键显示结果如下:f =0.7854n =100(三)1000等份输入函数变量:f=inline(1/(1+x*x);f,n=tyszjf(f,0,1,1000,nc)按回车键显示结果如下:f =0.7854n =10003.2.5自适应积分调用实例(一)wc=0.5*10(-6)输入函数变量:f=inline(1/(1+x*x);f,n=tyszjf(f,0,1,n,zsy,0.5*10(-6)按回车键显示结果如下:f=0.7854n=8(二)wc=0.5*10(-7)输入函数变量:f=inline(1/(1+x*x);f,n=tyszjf(f,0,1,n,zsy,0.5*10(-7)按回车键显示结果如下:f =0.7854n =8(三)wc=0.5*10(-5)输入函数变量:f=inline(1/(1+x*x);f,n=tyszjf(f,0,1,n,zsy,0.5*10(-5)按回车键显示结果如下:f =0.7854n =83.3小结通过调用实例可以看出,本文所编写的通用数值积分程序拥有处理矩形积分、梯形积分、辛普森积分、牛顿-柯茨积分及自适应积分的能力,依赖系统提供的两个永久变量nargin和nargout达到输入与输出接口的可变性,从而达到可输入多个变量和输出多个变量的功能。当然如果通过在该程序中添加更多的接口载入更多的程序模型,这个程序的功能将会更加强大。 第四章 结语本文主要讨论了数值积分的计算方法并通过MATLAB软件编程实现,通过前面的研究我们知道求数值积分近似值的计算方法很多,包括Newton-Cotes求积公式、矩形求积公式、梯形求积公式、辛普森求积公式等等 。其中Newton-Cotes方法是一种利用插值多项式来构造数值积分的常用方法,这其中矩形公式和梯形公式的计算误差比较大,但相对来说计算的步骤比较简单;而辛普森公式和柯茨公式的计算精度较高,但计算步骤会相对复杂。当我们通过matlab编写程序来实现这些公式的时候,我们可以利用matlab强大的计算功能,对这些公式进行复化。我们可以将区间细分,缩小步长,逐步逼近精确值。当然,等分区间越多,计算时间就会越长。这时我们就可以从程序的角度对源程序进行优化,使计算步骤尽量简单,这样也可以缩短计算时间。通过对各种积分方法的运用实例进行分析,不难看出:虽然matlab的功能足够强大,但是各种积分方法的实现过程比较复杂,需要分别输入程序进行计算。我们通过对调用程序的研究发现,通过在主程序中添加接口,可以很方便的调用各个子程序,因此,我们可以将积分问题集中化处理,通过子程序的整合和主程序的调用,我们可以编写出适应所有积分问题的主程序,当然这需要进一步的研究,但是本文已经给出了很好的范例。相信通过不断地研究以及matlab强大的功能,日后肯定会实现。参考文献1 刘玉娟,陈应祖.龙贝格积分法及其应用编程J.重庆科技学院学报,2007,9(1):97-992 朱叶志.MATLAB数值分析与应用M.北京:机械工业出版社,20093 Li F,Li X.The neighbor-scattering number can be computed in polynomial time for interval graphsJ.Computers and Mathematics with Applications,2007,54:679-686.4 朱晓临.数值分析M.合肥:中国科学技术大学出版社,2010.7.5 杨旭龙.无穷积分的计算及Matlab的实现C.吉昌学院本科毕业论文,2013.5.6 刘小伟.基于MATLAB的复合梯形数值积分法的研究与实验J.甘肃联合大学学报(自然科学版),2010,24(4):20-237 余丹.用Simpson公式进行数值积分J.华北电力大学数理系学报,2010,(23):189-190.8 Davis,P.J.and P.Rahinowitz.Methods of Numerical integration(second edition)M. Academic Press. New York,19849 曹丽华.一类广义Gauss型求积公式J.深圳大学数学物理学报,2007,27(3):524-53410 郭晓斌.复化两点Gauss-Legendre公式及其误差分析J.西北师范大学学报,2010,4(3):49-5111 王建强.多种数值积分方法比较分析J.武汉大学测绘轩辕学报,2010,2(1):104-106附 录主程序%-% 本程序是将数值积分的常用算法集成在一起,命名为% tyszjf.m以供调用% 这些常用算法包括左矩形、右矩形、中矩形、梯形、辛普森、% 牛顿柯特斯、采用自适应变步长的辛普森算法达到指定误差。% 其中输入与输出接口中参数是可变化的,这主要依赖系统提供% 的两个永久变量nargin和nargout% 虚参f由实参传递过来,可采用内联函数的方式,如下例:% tyszjf(inline(1/(1+x*x),0,1,100,sps)% val,n=tyszjf(inline(1/(1+x*x),0,1,100,sps)% val=tyszjf(inline(1/(1+x*x),0,1,100,sps)% %-function out1,out2=tyszjf(f,a,b,n,sf,wc)if nargin=3 n=100; sf=sps; wc=0.5*10(-6);endif nargin=4 sf=sps; wc=0.5*10(-6);endif nargin=5 wc=0.5*10(-6);endswitch sf case zjx x=linspace(a,b,n+1); %n等分点记入数组中 h=(b-a)/n; djf=0; %累加器清零 for i=1:1:n djf=djf+h*f(x(i); end if nargout=0 out1=djf; end if nargout=1 out1=djf; end if nargout=2 out1=djf; out2=n; end case yjx x=linspace(a,b,n+1); %n等分点记入数组中 h=(b-a)/n; djf=0; %累加器清零 for i=2:1:n+1 djf=djf+h*f(x(i); end if nargout=0 out1=djf; end if nargout=1 out1=djf; end if nargout=2 out1=djf; out2=n; end case mjx x=linspace(a,b,n+1); %n等分点记入数组中 h=(b-a)/n; djf=0; %累加器清零 for i=1:1:n djf=djf+h*f(x(i)+x(i+1)/2); end if nargout=0 out1=djf; end if nargout=1 out1=djf; end if nargout=2 out1=djf; out2=n; end case tx x=linspace(a,b,n+1); %n等分点记入数组中 h=(b-a)/n; djf=0; %累加器清零 for i=1:1:n djf=djf+(f(x(i)+f(x(i+1)*h/2; end if nargout=0 out1=djf; end if nargout=1 out1=djf; end if nargout=2 out1=djf; out2=

温馨提示

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

评论

0/150

提交评论