f =0.7854 n =8
3.3小结
通过调用实例可以看出,本文所编写的通用数值积分程序拥有处理矩形积分、梯形积分、辛普森积分、牛顿-柯茨积分及自适应积分的能力,依赖系统提供的两个永久变量nargin和nargout达到输入与输出接口的可变性,从而达到可输入多个变量和输出多个变量的功能。当然如果通过在该程序中添加更多的接口载入更多的程序模型,这个程序的功能将会更加强大。
12
第四章 结语
本文主要讨论了数值积分的计算方法并通过MATLAB软件编程实现,通过前面的研究我们知道求数值积分近似值的计算方法很多,包括Newton-Cotes求积公式、矩形求积公式、梯形求积公式、辛普森求积公式等等 。
其中Newton-Cotes方法是一种利用插值多项式来构造数值积分的常用方法,这其中矩形公式和梯形公式的计算误差比较大,但相对来说计算的步骤比较简单;而辛普森公式和柯茨公式的计算精度较高,但计算步骤会相对复杂。当我们通过matlab编写程序来实现这些公式的时候,我们可以利用matlab强大的计算功能,对这些公式进行复化。我们可以将区间细分,缩小步长,逐步逼近精确值。当然,等分区间越多,计算时间就会越长。这时我们就可以从程序的角度对源程序进行优化,使计算步骤尽量简单,这样也可以缩短计算时间。
通过对各种积分方法的运用实例进行分析,不难看出:虽然matlab的功能足够强大,但是各种积分方法的实现过程比较复杂,需要分别输入程序进行计算。我们通过对调用程序的研究发现,通过在主程序中添加接口,可以很方便的调用各个子程序,因此,我们可以将积分问题集中化处理,通过子程序的整合和主程序的调用,我们可以编写出适应所有积分问题的主程序,当然这需要进一步的研究,但是本文已经给出了很好的范例。相信通过不断地研究以及matlab强大的功能,日后肯定会实现。
13
参考文献
[1] 刘玉娟,陈应祖.龙贝格积分法及其应用编程[J].重庆科技学院学报,2007,9(1):97-99.
[2] 朱叶志.MATLAB数值分析与应用[M].北京:机械工业出版社,2009. [3] Li F,Li X.The neighbor-scattering number can be computed in polynomial time for interval graphs[J].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-23.
[7] 余丹.用Simpson公式进行数值积分[J].华北电力大学数理系学报,2010,(23):189-190.
[8] Davis,P.J.and P.Rahinowitz.Methods of Numerical integration(second edition)[M]. Academic Press. New York,1984.
[9] 曹丽华.一类广义Gauss型求积公式[J].深圳大学数学物理学报,2007,27(3):524-534.
[10] 郭晓斌.复化两点Gauss-Legendre公式及其误差分析[J].西北师范大学学报,2010,4(3):49-51.
[11] 王建强.多种数值积分方法比较分析[J].武汉大学测绘轩辕学报,2010,2(1):104-106.
14
附 录
主程序
%-------------------------------------------------------------- % 本程序是将数值积分的常用算法集成在一起,命名为 % 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); end if nargin==4 sf='sps'; wc=0.5*10^(-6); end if nargin==5 wc=0.5*10^(-6); end
15
switch 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;
16