1、原函数存在,但是其表达式相当复杂,而且有时候难以给出最后的数值结果;除一些特俗的无穷外,通常很难求出无穷积分的值;被积函数没有有限的解析式,而以表格的形式给出.因此能够借助牛顿-莱布尼兹公式计算定积分的情形是不多的.另外,许多实际问题中的被积函数往往是列表函数或其他形式的非连续函数,对这类函数的定积分,也不能用不定积分方法求解,只能设法求其近似值.因此,探讨近似计算的数值积分方法是有明显的实际意义的,即有必要研究定积分的数值计算方法,以解决定积分的近似计算。而数值积分就是解决此类问题的一种有效的方法,它的特点是利用被积函数 在一些节点上的信息求出定积分的近似值.在求一些函数的定积分时,由于原函
2、数十分复杂难以求出或用初等函数表达,导致积分很难精确求出,只能设法求其近似值,因此能够直接借助牛顿-莱布尼兹公式计算定积分的情形是不多的.数值积分就是解决此类问题的一种行之有效的方法.因此,探讨近似计算的数值积分方法是有着明显的实际意义的.本文较详细地介绍了牛顿-科特斯求积公式,以及为了提高积分计算精度的高精度数值积分公式,即龙贝格求积公式和高斯-勒让德求积公式.除了研究这些数值积分算法的理论外,本文还将这些数值积分算法在计算机上通过MATLAB软件编程实现,并通过实例用各种求积公式进行运算,分析比较了各种求积公式的计算误差.1.2常见的插值法插值法常需要从一组有限的实验观测数据里获取自变量和
3、函数之间的关系,或者推算出该函数在某些点上的函数值,或者求解与该函数相关的一些问题.本次报告所用到的常用插值法有:1 拉格朗日插值法2 牛顿插值法3 赫尔米特插值法1.3 MATLAB的简介MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分.MATLAB是matrix & laboratory两个词的组合,意为矩阵工厂(矩阵实验室),是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境.它将数值分析、矩阵计算、科学数据可
4、视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平.MATLAB和Mathematica、Maple并称为三大数学软件.它在数学类科技应用软件中在数值计算方面首屈一指.MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域.MATLAB的
5、基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件.在新的版本中也加入了对C,FORTRAN,C+,JAVA的支持.MATLAB软件在数值分析实验教学上具有与其他软件无法比拟的优势.2 插值法简介设函数在区间a,b上有定义,且一直在点的值,若存在以简单函数,使成立,使称为的插值函数,点称为插值节点,包含插值节点的区间a,b称为插值区间,求插值函数的方法称为插值法,若是次数不超过n的代数多项式,即其中为实数,就称为
6、插值多项式,相应的插值法称为多项式插值.若是分段多项式,就是分段插值。若是三角多项式,就称为三角插值.从几何上看插值法就是求曲线,使其通过给定的n+1个点,并用它近似已知曲线.2.1拉格朗日插值法定义 若次多项式在个节点上满足条件就称这个n次多项式为节点上的n次插值基函数.用及的情况得到的1次插值基函数和2次插值基函数加以推导可得到n次插值基函数为于是满足上式的插值多项式可表示为由的定义,知.我们将形如上式的插值多项式称为拉格朗日多项式.2.1.1拉格朗日插值法的MATLAB程序Function yi = Lagrange(x,y,xi) %用Lagrange插值法求解m=length(x);
7、 n=length(y); p=length(xi); %x是节点向量,y是x的函数值,xi是插值点if m=n error(向量x与y的长度必须一致);ends=0;for k=1:n t=ones (1,p); %生成1行p列所有元素均为1的矩阵 for j = 1: n if j = k; t=t.* (xi-x(j)/(x(k)-x(j); %计算拉格朗日插值基函数 end end s = s + t* y(k); %计算拉格朗日插值函数yi = s;2.1.2拉格朗日插值法的MATLAB程序例题例2.1.1已知,sin0.34=0.3335,sin0.36=0.3623,使用拉格朗日
8、插值法求sin0.3367.解:在MATLAB命令窗口调用命令Lagrange(x0,y0,x)的程序如下:x= 0.32,0.02,0.36; y= 0.3146,0.3335,0.3523;y1=Lagrange (x, y,115)运行结果:y1=0.3304 例2.1.2 用拉格朗日插值法计算 . x= 100 121;y= 10,11; y1=Lagrange (x, y,115);y1=10.7143 2.2牛顿插值法定义1 称为函数关于点,的一阶均差.称为的二阶均差.一般地,称为的k阶均差.借助均差的定义,一次插值多项式可表示为,而二次插值多项式可表示为根据均差的定义,由一次插值
9、多项式和二次插值多项式可得到我们将满足的多项式称为牛顿均差插值多项式.定义2 在的情形下,设函数值为,称为处以为步长的一阶(向前)差分.类推为的二阶差分.一般地,称为的n阶差分.则 为牛顿前插公式.2.2.1牛顿插值法的MATLAB程序function yi = newtonint (x, y, xi) %定义牛顿插值函数 %x是节点向量,y是节点上的函数值) k = 2; f (1) = y (1) while k = n+1 f (1) =y(k); k, x(k) for i=1: k-1 if i=k-1 f(i+1) =(f(i)-y(i)/(x(k)-x(i); end cs(i)
10、=f(i+1); y(k)=f(k); k=k+1; cfwh=0 for i=1: n-2 w=1; for j=1: i w=w*(xi-x(j); cfwh=cfwh + cs(i)*w; yi=y (1) +cfwh2.2.2牛顿插值法的MATLAB程序例题的函数值如下表所示,用MATLAB构造4次牛顿插值多项式并计算 的值.k123450.400.550.650.800.901.050.410750.578150.696750.888111.026521.25386表2.2.1 函数表 x= 0.40,0.55,0.65,0.80,0.90,1.05;y= 0.41075,0.578
11、15,0.69675,0.88811,1.02652,1.25386;xi=0.596;ni=newtonint (x, y, xi);N4(x)=0.4108+1.116(x-0.4)+0.2800(x-0.4)(x-0.55)+0.1973(x-0.4)(x-0.55)(x-0.65)+0.0312(x-0.4)(x-0.55)(x-0.65)(x-0.8)ch0.596 = N4(0.596) 0.6391 0.4000041080.55000.57821.11600.65000.69671.14400.28000.80000.88811.19340.30960.19730.90001.
12、02651.23150.33010.20050.03121.05001.25391.29710.36220.20550.03250.0085表2.2.2 差商表 2.3赫尔米特插值法赫尔米特插值问题形式较多,这里可以结合拉格朗日插值法和牛顿插值法来构造赫尔米特插值多项式.设在(a,b)上具有三阶连续导数,且已知插值条件为,及,,,且,试求一个次数不超过二次多项式,使满足并给出误差估计式.方法一:应用Lagrange多项式构造可得误差为:我们常将上式称为Lagrange-Hermite插值多项式.方法二:应用Newton插值法构造由于要求满足, 故可满足,还要满足条件. 故设, 其中A为待定常数
13、,则.由可得, 从而得到:被称为Newton-Hermite插值多项式.2.3.1赫尔米特插值法的MATLAB程序function yi = hermite (x, y, ydot, xi) %定义赫尔米特插值函数if isempty(ydot)=1 ydot=gradient (y, x); endn=length(x); m1=length(y); m2=length(ydot);if n=m1|nm2|m1=m2 error( p=zeros (1, n); %生成元素全为0的矩阵q=zeros (1, n);yi=0; for k=1: t=ones (1, n); %生成1行n列的全
14、为1的矩阵z=zeros (1, n); if j=k t(j)=(xi-x(j)/(x(k)-x(j); z(j)=1/(x(k)-x(j); p(k)=prod(t); q(k)=sum(z); yi=yi + y(k)*(1-2*(xi-x(k)*q(k)*p(k)2+ydot(k)*(xi-x(k)*p(k)2;2.3.2赫尔米特插值法的MATLAB程序例题例2.3.1对于给定数据如下表,试构造赫尔米特多项式,并给出sin0.34的近似值:x0.310.330.35sin x0.30510.32400.3429cos x0.95230.94600.9394在MATLAB命令窗口调用命令
15、的程序如下:0.31 0.33 0.35;0.3051 0.3240 0.3429;0.9523 0.9460 0.9394;结论插值法是通过有限个点上取值来构造出多项式的计算方法,并通过构造多项式来对问题进行解决.本次报告列举出了插值法中最经典的三种插值法:拉格朗日插值法、牛顿插值法和赫尔米特插值法,并写出它们的MATLAB程序和程序例题.通过三种插值法本身的性质和程序对它们进行比较.拉格朗日插值法是最基本的插值法,它使用基函数法进行构造其插值函数在插值区间的解析表达式关于节点对称、光滑性好.它的优点有结构紧凑、思想清晰、公式对称,与插值节点的编号无关,适合理论分析,容易编程上机实现计算结果
16、.而它的缺点也不可忽视,它不具有承袭性,当增加插值节点时,需要重新计算所有的插值基函数,原来的计算结果不能被利用,增加了很大部分的计算量.牛顿插值法使用基函数构造,其系数可以使用差商表计算得到,克服了拉格朗日插值法的部分缺点,它具有承袭性与灵活增加节点的优越性且计算量远小于主次线性插值算法,适用于手工计算.由于插值多项式的唯一性,拉格朗日插值多项式与牛顿插值多项式是完全相同的,只是同一插值多项式的表达形式各不相同而已.但牛顿插值的误差更具有一般性,对导数不存在或由f离散点给出情形均可使用如果节点等距的情况下,可以用差分构造牛顿插值,进一步简化系数计算.如果插值多项式节点处函数值相等,而且要求其
17、导数值也相等,则可用基函数构造带导数的赫尔米特插值.本次报告用拉格朗日插值法和牛顿插值法来构造赫尔米特插值函数,得到结论是拉格朗日插值法构造的函数形式要比牛顿插值法构造的函数形式简单,并且容易递推成更高阶数的形式.所以,在没有特殊强调采用哪种方法的情况下,可以优先考虑用拉格朗日插值法来构造和赫尔米特函数.赫尔米特插值法具有较高的精度,如果插值条件不仅含有对节点处的函数的约束,而且还增加在节点处对导数的限制,解决这个问题的方法就要用到赫尔米特插值多项式,如果没有要求导数值可以用拉格朗日插值法.本次通过插值法的简介和MATLAB软件,列举出了三种插值法的MATLAB程序和应用这些程序的计算例题,更
18、客观的了解各插值法之间的相互联系和它们各自的优点和缺点.参考文献1 李庆扬. 数值分析M. 北京:清华大学出版社,2008. 22-39.2 陈锟,田晓梅. 用Matlab进行插值法比较教学研究N. 电气电子教学学报,2012-4(2).3 黄光东, 管建和. 基于Matlab平台的插值法技术实现与应用J. 电脑编程技巧与编程, 2006, 2(7): 30-31, 36.4 魏春艳, 朱清芳. 基于Matlab的Newton插值实验课的教学探讨N. 洛阳师范学院学报, 2012- 5(5).5 王凤玲, 陈庆林, 孙丽男. Lagrange、Newton、Hermite插值法MATLAB算法比较研究及应用N. 黑河学院学报, 2015- 12(6).6 哈尔滨工业大学计算数学教研室. 数值分析习题与实验M. 哈尔滨:哈尔滨工业大学出版社,2015. 94, 96.