1、 摘要 插值法是函数逼近的一种重要方法,是数值计算的基本课题.数学上来说,拉格朗日插值法可以给出一个恰好穿过二维平面上若干个已知点的多项式函数.Lagrange插值是n次多项式插值,其成功地用构造插值基函数的方法,解决了求n次多项式插值函数问题.Lagrange插值的基本思想是将待求的n次多项式插值函数改写成另一种表示方式,再利用插值条件确定其中的待定函数,从而求出插值多项式. 拉格朗日插值法是一种很实用的插值方法,可以应用在渔业资源评估中、化学中、工程中、工业中、机械设计与制造领域,以及计算机方面.本课题意在将拉格朗日插值法应用到实际中,主要通过程序的编写(有拉格朗日插值法的Matl
2、ab和C语言实现)将算法在计算机中实现,求得相应的解.进一步体现拉格朗日插值法在解决问题时的实际意义. 关键词 插值基函数;插值多项式;Lagrange插值;算法 Abstract Interpolation function approximation is a kind of important method, num
3、erical calculation is the basic subject.Mathematical speaking,Lagrange interpolation method can give a right through the two dimensional plane several known point polynomial function.Lagrange interpolation is n times polynomial interpolation,which succeeded in structure interpolation basis function
4、method,solve the on times polynomial interpolation function problem. Lagrange interpolation basic idea is to will stay for n times polynomial interpolation function rewritten into another means,reuse interpolation condition to determine the required function,so as to find out the interpolation polyn
5、omial. Lagrange interpolation method is a very practical interpolation method, can be used in fishery resources evaluation,chemistry,engineering, industry, mechanical design and manufacturing,and computers to.This topic will be Lagrange interpolation method was used to practice,mainly through the p
6、rocess of writing(with Lagrange interpolation method of Matlab and C language implementation)algorithm is realized in computer,get the corresponding solution.Further reflected Lagrange interpolation method in solving problems of practical significance. Keywords interpolation basis function;Interpol
7、ation polynomial;Lagrange interpolation;algorithm 目录 引言 1 第一章 拉格朗日插值法 2 §1.1 基本概念 2 §1.2 拉格朗日插值法 2 §1.2.1 基函数 2 §1.2.2拉格朗日插值公式 3 §1.2.3 余项与误差估计 4 第二章 拉格朗日插值法的程序设计及应用 8 §2.1拉格朗日插值法的Matlab实现 8 §2.2拉格朗日插值法的C语言实现 9 §2.2.
8、1 流程图 9 §2.2.2 C语言编程 10 §2.3 拉格朗日插值法的应用 11 §2.3.1 在渔业资源评估上的应用 11 §2.3.2 利用拉格朗日插值法解决传热过程中的导热系数 12 参考文献 14 附录A 15 附录B 16 引言 在数值分析中,拉格朗日插值法是以法国十八世纪数学家约瑟夫·路易斯·拉格朗日命名的一种多项式插值方法.约瑟夫·拉格朗日(Joseph Louis Lagrange),法国数学家、物理学家.他在数学、力学和天文学三个学科领域中都有历史性的贡献,其中尤以数学方面的成
9、就最为突出.拉格朗日对流体运动的理论也有重要贡献,提出了描述流体运动的拉格朗日方法.1795年,拉格朗日在其著作《师范学校数学基础教程》中发表了这个插值方法,从此他的名字就和这个方法联系在一起.数据建模有两大方法:一类是插值方法,另一类是拟合函数,一般的说,插值法比较适合数据准确或数据量小的情形.然而Lagrange插值有很多种,1阶,2阶,…n阶.我们可以利用拉格朗日插值求方程,根据它的程序求原方程的图像.拉格朗日插值法可以找到一个多项式,其恰好在各个观测的点取到观测到的值. 实际问题中所遇到的许多函数很难找到它的解析表达式.有时通过实验或数值计算所得到的也只是一些离散的(一般是互不相同)
10、点(i=0,1,...,n)上的函数值,在实际应用中,一般将这些数据列成数据表格的形式.通常,将这种用数据表格形式给出的函数称为列表函数,其中点称为结点.根据函数已有的数据表格来计算函数在一些新的点处的函数值,这就是插值法所要解决掉问题.插值法的基本思想是,首先设法根据表格中已有的函数值值来构造一个简单的函数作为的近似表达式,然后再用来计算新的点上的函数值作为的近似值.通常可以选多项式函数作为近似函数,因为多项式具有各阶导数,求值也比较方便. 本课题研究的是拉格朗日插值法的程序设计,计算机实现,以及拉格朗日插值法的应用. 第一章 拉格朗日插值法 §1.1 基本概念
11、 下面介绍有关拉格朗日插值法的相关概念. 定义1.1 设函数在区间上有定义,且已知在点上的值,若存在一简单函数,使 (1.1) 成立,就称为的插值函数,点称为插值节点,包含插值节点的区间称为插值区间,求插值函数的方法称为插值法. 若是次数不超过n的代数多项式,即 其中为实数,就称为插值多项式,相应的插值法称为多项式插值. 定义1.2 设给定数据点,(互异),欲找二者的近似关系,满足 (1) (2) 则称为n次代数插
12、值多项式.
13、
14、 定理1.1 满足条件(1.1)的插值多项式是存在唯一的. 直接求解方程组就可以得到插值多项式,但这是求插值多项式最繁杂的方法,一般是不用的,下面将给出构造插值多项式更简单的方法. §1.2 拉格朗日插值法 §1.2.1 基函数 为了构造插值多项式,我们先定义插值基函数. 定义1.3 设是给定的彼此互异的个插值结点, 为给出的函数值,则是唯一的次数不超过的,满足的多项式.其中
15、 为拉格朗日插值基函数,为拉格朗日插值函数. 下面介绍基函数的性质. 性质1.1 性质1.2 性质1.3 §1.2.2 拉格朗日插值公式 定理1.2 n次代数插值问题的解为 称为拉格朗日插值多项式. 特殊化,得到如下插值公式. (1)线性插值 设已知,及=f() ,=f(),为不超过一次多项式,且满足 =,=, 几何上,为过(,),(,)的直线,从而得到 . (1
16、2) 为了推广到高阶问题,我们将式(1.2)变成对称式 =(x)+(x). 其中, (x)=,(x)=.均为1次多项式且满足 (x)=1且(x)=0.或(x)=0且(x)=1. 两关系式可统一写成. (1.3) (2)抛物线插值 假定插值结点为,要求抛物线插值(即二次插值)多项式,使它满足 我们知道在几何上就是通过三点,,的抛物线.为了求出的表达式,可采用基函数
17、法,此时基函数及是二次函数,且在节点上分别满足条件 (1.4) 满足条件(1.4)的插值基函数是很容易求出的,例如求,因它有两个零点及,故可表示为 , 其中A为待定系数,可由条件定出 , 于是 . 同理可得 , . 利用二次插值基函数,,立即得到二次插值多项式 , (1.5) 显然,它满足条件.将上面求得的,代入(1.5)式,得 . §1.2.3余项与误差估计 拉格朗日插值用来求n个节点的(n-1)次插值多项式,它就是线性插值和抛物线插值的推广和延伸.我们设有n个节点,则拉格朗日
18、插值的表达式表示为: 若在上用近似,则其截断误差为,也称为插值多项式的余项.关于插值余项估计有以下定理.下面的定理说明了用插值多项式近似代替函数时的余项. 定理1.3 (余项定理) 设在上连续,在内存在,节点,是满足条件的插值多项式,则对任何,插值余项 , (1.6) 这里且依赖于,. 这里需要说明如下两点. (1) 在插值多项式的余项公式中,包含有,其中,一般与插值结点以及插值点有关,因此,一般是无法知道的,这就对余项的估计带来了困难. (2) 由插值多项式的余项公式可以看出,当被插值的函数为次数不高于的多项式时,其次插值多项式就是它本身,因
19、为此时,即余项为0. 应当指出,余项表达式只有在的高阶导数存在时才能应用.在内的具体位置通常不可能给出,如果我们可以求出,那么插值多项式逼近的截断误差限是 . 当时,线性插值余项为 当时,抛物线插值的余项为 利用余项表达式(1.6),当时,由于,于是有 由此得 (1.7) 特别当时,有 (1.8) (1.7)式和(1.8)式也是插值基函数的性质,利用它们还可求一些和式的值. 例1 已知函
20、数表sin=0.5000,sin=0.7071,sin=0.8660,分别由线性插值与抛物插值求sin的数值解,并由余项公式估计计算结果的精度. 解(1)这里有三个节点,线性插值需要两个节点,根据余项公式,我们选取前两个节点,易知: sin()=0.5000+(-) =0.5000+0.2071=0.6381 截断误差, =, 得知结果至少有1位有效数字. (2)易知 sin0.7071+ =0.8660=0.6434 . 截断误差为: 得知结果至少有两位数字. 比较本题精确解sin0.6
21、42787609...,实际误差限分别为0.0047和0.00062. 第二章 拉格朗日插值法的程序设计及应用 §2.1 拉格朗日插
22、值法的Matlab实现 在Matlab中,利用Lagrange插值方法进行多项式插值,并将图形显式出来. 实现Lagrange插值的步骤如下: Step1 定义函数f = 1./(25*x^2+1)将其保存在f.m 文件中,具体程序如下: function y = f1(x) y = 1./(25x.^2+1);
23、 Step2 定义拉格朗日插值函数,将其保存在lagrange.m 文件中,具体实现程序 编程见附录A. Step3 建立测试程序,保存在text.M文件中,实现画图: x=-1:0.001:1; y=(1+25.*x.^2).^-1; p=polyfit(x,y,n); py=vpa(poly2sym(p),10); plot_x=-1:0.001:1; f1=polyval(p,plot_x); figure
24、 plot(x,y,'r',plot_x,f1) 输入n=6时,出现如下面的图2.1所示. 图2.1 Largange插值图像 通过图2.1可以看出当n=6时,被插图像与插值图像没有很好的模拟,于是重新运行text.M,并选择n=15,运行,显示如图2.2所示. 图2.2 Largange插值图像 综合图2.1和图2.2的Lagrange插值图像可以看出,n=15时的被插图像与插值图像实现了很好的模拟.
25、 结果分析: 由图2.1和图2.2可以看出n的次数越高,越能实现较好的模拟,从而模拟的效果越好,从图2.2就可以看出两条曲线接近重合,而图一两条直线却分开很多,误差较大,精度也不高.因此在实际的应用中应该尽量在给定的条件下增加n的次数,才能实现与原函数较好的重合,才能使计算的结果更加的准确,从而减小了误差. §2.2 拉格朗日插值法的C语言实现 在Visual C++中,用C语言实现拉格朗日插值. §2.2.1 流程图 要用C语言实现拉格朗日插值,先画出流程图. 程序流程图: 开始 输入已知点个数n ↓
26、 ↓ 输入已知点的X坐标以及输入已知点的Y坐标 调用函数lagrange函数 ↓ 输出结果 ↓ 图2.3 流程图 §2.2.2 C语言编程 用C语言编程的步骤如
27、下: Step1定义拉格朗日插值算法; Step2 int n;{如果n>=20或n<=0,则输出"Error!The value of n must in (0,20)."} for i:=0 to n-1{输入x和y的值} Step3输出根据给定的点求出其对应的拉格朗日插值多项式的值 . 举例如下: 已知当x=1,-1,2时f(x)=0,-3,4,求f(1.5)的值.源程序见附录B. 运行结果如下: 图2.4 截屏
28、 §2.3 拉格朗日插值法的应用 拉格朗日插值法可以应用在各个方面. §2.3.1 在渔业资源评估上的应用: 应用拉格朗日插值法拟合鱼类体长与体重之间的关系,使用计算机VB语言进行编写程序,与常用的线性回归法、Ricker法进行比较,得出体长与体重的关系式为 在资源评估过程中,当测量次数确定为时,将测量到同一种不同大小的鱼类样品对应的体长与体重数据,其中表示第条鱼的体长,表示第条鱼的体重,即求作次多项式,使满足条件 (2.1) 点(它们互不相
29、同,若在测量中有相同的体长值归为一组数值)称为插值节点.用几何的语言来表达这类插值,就是通过体长与体重关系曲线上给定的个点,求作一条次代数曲线作为的近似.解决这个问题时先从构造插值基函数入手,这里的插值基函数是次多项式,且满足条件 (2.2) 这表明除以外的所有节点都是的零点,故 , (2.3) 按(2.2)式中的第2个条件确定其中的系数,结果有
30、 (2.4) 利用插值基函数容易得出方程(2.1)的解 (2.5) 通过这个方程,我们可以从同一种鱼类对应体长求得相应较为精确的近似体重. §2.3.2 利用拉格朗日插值法解决传热过程中的导热系数 化学工程手册中通常给出的导热系数是离散数据,而此数据误差较大1为了减小导热系数的误差,我们可采用拉格朗日插值法求得准确度较高的导热系数. 以苯为例,求160℃下的值.
31、 表2-1不同温度下苯的导热系数 根据表2-1中所给出的值,可确定为共有5个节点,能构造4次插值函数. 首先构造, 而,故, 则, 同理可构造求得 0.9592; 这样,4次插值函数为 =0.0235. 也就是说用拉格朗日插值法求得苯在160下的导热系数为0.0235. 拉格朗日插值法还可以应用在基于拉格朗日插值法修正地形影响的分布式降水模型研究中,基于质心拉格朗日插值的GPS轨道标准化方法,基于高维拉格朗日插值法的三坐标测量机测量误差建模,基于拉格朗日插值的射线图像增强技术,基
32、于拉格朗日插值的参数曲线隐式化等方面. 参考文献 [1]Jhon H. Mathews Kurtis D.Fink .数值方法(MATLAB版).电子工业出版社.2002年 [2]关治.数值计算方法.清华大学大学出版社.2005年 [3]徐士良.数值方法与计算机实现[M].清华大学出版社.2010年 [4]李庆扬.数值分析[M].北京:清华大学出版社.2008年 附录A Matlab编程 funtion y=la
33、grange(x0,y0,x) m= length(x); n=length(x0) for i=1:n l(i)=1 end for i=1:m for j=1:n for k=1:n if j==k continue end l(j)=(x(i)-x0(k))/(x0(j)-x0(k))*l(j); end end end y=0 for i=1
34、n
y = y0(i)*l(i)+y
End
附录B C语言编程
#include
35、malloc(n*sizeof(float)); for(i=0;i<=n-1;i++) { a[i]=y[i]; for(j=0;j<=n-1;j++) if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]); yy+=a[i]; } free(a); return yy; } int main() { int i; int n;
36、 float x[20],y[20],xx,yy; printf("Input n:"); scanf("%d",&n); if(n>=20) { printf("Error!The value of n must in (0,20)."); getch();return 1; } if(n<=0) { printf("Error! The value of n must in (0,20)."); getch();
37、 return 1; } for(i=0;i<=n-1;i++) { printf("x[%d]:",i); scanf("%f",&x[i]); } printf("\n"); for(i=0;i<=n-1;i++) { printf("y[%d]:",i);scanf("%f",&y[i]); } printf("\n"); printf("Input xx:"); scanf("%f",&xx); yy=lagrange(x,y,xx,n); printf("x=%f,y=%f\n",xx,yy); getch(); } 17






