拉格朗日多项式插值法浅析摘要拉格朗日插值多项式是一种最常见的多项式插值法,也是一种最常用的逼近工具。
“学以致用 ”是每一门学科都致力追求的境界,数学自然也不例外。
下面,探讨拉格朗日插值法的基本原理、如何构造拉格朗日多项式、拉格朗日多项式的误差界,并用 MATLAB 程序来实现这一数学算法的自动化,为复杂的分析研究提供了一条数学算法的捷径。
【关键词】:拉格朗日多项式 算法实现 MATLAB在科学研究和实际的工程设计中,几乎所有的问题都可以用)(x f y =来表示其某种内在规律的数量关系。
但理想化的函数关系在实际工程应用中是很难寻找 的,对于那些没有明显解析式的函数关系表达式则只能通过实验观察的数据,利用多项式对某一函数的进行逼近,使得这个逼近函数能够反映)(x f 的特性,而且利用多项式就可以简便的计算相应的函数值。
例如我们不知道气温随日期变化的具体函数关系,但是我们可以测量一些孤立的日期的气温值,并假定此气温随日期变化的函数满足某一多项式。
这样,利用已经测的数据,应用待定系数法便可以求得一个多项式函数f (x )。
应用此函数就可以计算或者说预测其他日期的气温值。
一般情况下,多项式的次数越多,需要的数据就越多,而预测也就越 准确。
当然,构造组合多项式方法比较多,如线性方程求解、拉格朗日系数多项式以及构造牛顿多项式的分段差分和系数表等等,这里只对拉格朗日多项式插值法进行深入探讨。
一、拉格朗日多项式插值算法基本原理函数)(x f y =在区间[a,b]上有定义,在是[ a,b]上取定的 N + 1个互异节点, 且在这些点处的函数值)(0x f , )(1x f ,…,)(n x f 为已知, 即 yi =f (xi ) , (N i ...1,0=),若存在一个和)(x f 近似的函数)(x P N ,满足)()(i i N x f x P = (N i ...1,0=) (1)则称 φ(x) 为 f (x) 的一个插值函数, 点i x 为插值节点,(1)称为插值条件, 区间[a,b]称为插值区间, 而误差函数)()(x P x f E N N -=称为插值余项。
即是求一个不超过N 次多项式0111...)(a x a x a x a x P N N N N N ++++=-- (N i ...1,0=)满足 )()(i i N x f x P = (N i ...1,0=)则)(x P N 成为)(x f 的N 次拉格朗日插值多项式。
二、拉格朗日插值多项式的构造1、线性插值当 n = 1时即为线性插值, 这也是代数插值最简单的形式。
根据给定函数)(x f 在两个互异节点1x 、2x 的值)(1x f 、)(2x f ,用线性函数b ax x P +=)(来近似代替)(x f 。
由点斜式直线方程可得:10010)()(x x x x y y y x P ---+= (2) 公式(1)可整理写成:1011011)(x x x x y x x x x y x P --+--= (3) 式(2)的右端的每一项都包含了一个线性因子,记 1010,1)(x x x x x L --=101,1)(x x x x x L --= (4) 很容易看出来,1)()(11,100,1==x L x L ,0)()(01,110,1==x L x L ,因此式(3)中的多项式)(1x p 也给定两个定点:01001)0()(y y y x P =+= 11011)0()(y y y x P =+= (5)式(3)中的项)(0,1x L 和)(1,1x L 称为基于节点0x 和1x 的拉格朗日系数多项式(线性插值基函数)。
利用这种记法,式(2)可以记为和式: )()(,111x L yx P k k k∑== (6)也可以写成如下的矩阵:()⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎭⎫ ⎝⎛----=111)(0100110110101x x x x x x x x x x x y y x P (7) 2、二次插值当 n = 1时即为线性插值, 这也是常用代数插值。
根据给定函数)(x f 在两个互异节点1x 、2x 、3x 的值)(1x f 、)(2x f 、)(3x f ,构造次数不超过二次的多项式 c bx ax x P ++=22)(来近似代替)(x f 。
使满足二次插值条件)()(2i i x f x P =(2,1,0=i )。
)(2x p 的参数直接由插值条件决定,并满足下面方程组:⎪⎩⎪⎨⎧=++=++=++21221121020yc bx ax y c bx ax y c bx ax (6) 仿线性插值,用基函数的方法求解方程组。
求二次式1)(00=x L ,0)(10=x L ,0)(20=x L ,因1x 、2x 是)(0x L 的两个零点,因此设))(()(210x x x x m x L --=,又1)(00=x L ,确定系数c=))((12010x x x x --,从而导出:))(())(()(2010210x x x x x x x x x L ----=(7)同理,构造出条件满足0)(01=x L ,1)(11=x L ,0)(21=x L 的插值多项式))(())(()(2112010x x x x x x x x x L ----=(8)构造出条件满足0)(02=x L ,0)(12=x L ,1)(22=x L 的插值多项式))(())(()(1221020x x x x x x x x x L ----=(9)式(7)(8)(9)中的项)(0x L 、)(1x L 和)(2x L 称为基于节点0x 、1x 和3x 的拉格朗日系数多项式(二次插值基函数)。
利用这种记法,相应的有: )()(,122x L yx P k k k∑== (10)也可以写成如下的矩阵:()⎪⎪⎪⎭⎫⎝⎛⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛------------+-------+---=1))(())(())((1))(())(())((1))(()2)(())((12120210120210120221012021012021*******1010212010212x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x y y y P3、N 次插值当插值点增加到 N+ 1个时, 就可以通过 N+ 1个不同的已知点(i i y x ,) 来构造一个次数为n 的代数多项式 P (x)。
类似二次插值, 先构造一个特殊的 n 次多项式)(x L i ,使其各点满足=)(0x L k 0)(...)(11====k k k x L x L ,1)(=k k x L ,0)(...)(11===++n k k k x L x L ,因1x 、2x …n x 是)(x L k 的N 个零点,因此设))...()()...()(()(1121n k k k k x x x x x x x x x x m x L -----=+-,又1)(=k k x L ,确定系数))((12010x x x x m k --=,从而导出:))...()()...()(())...()()...()(()(11211121,n k k k k k k n k k k N x x x x x x x x x x x x x x x x x x x x x L ----------=+-+- (12)相应的有:)()(,10x L yx P k Nk kN ∑== (13)也可以写成如下的矩阵:()⎪⎪⎪⎪⎪⎭⎫⎝⎛⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛----+++------+++------+++--=------1)()()()()()(1)()()()()()(1)()()()()()(1 (1101101012110)1012010120101010210102101010M ΛΛΛΛΛM ΛM M ΛΛΛΛΛΛΛΛΛΛΛΛΛN N N N N N N N N N N N N N NN N N n N N N N N N x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x y y y P4、Lagrange 插值余项设],[1b a C f N +∈,且0x ,1x ,2x ,...,N x ∈[a,b]为N+1个节点。
如果x ∈[a,b],则)()()(x E x P x f N N += (14)其中)(x P N 是可以用来逼近)(x f 的多项式:)()()()(,0x L x f x P x f k N Nk k N ∑==≈ (15)误差项)(x E N 形如)!1()())...()(()(110+---=+N c fx x x x x x x E N N N (16)C 为区间],[b a 内的某个值。
三、拉格朗日多项式插值实现流程1、根据初始数据X 的取值求出相应的Y 值;2、建立W*W 的矩阵;3、利用卷积公式计算基于节点的Lagrange 系数矩阵;4、求)()(0,x L y x P Nk k N k N ∑==四、MATLAB 程序代码Lagrange 多项式逼近程序function [C,L]=lagran(X,Y) w=length(X); n=w-1;L=zeros(w,w); for k=1: n+1 V=1;for j=1: n+1 if k~=jV=conv(V,poly(X(j)))/(X(k)-X(j)); end endL(k,:)=V; end C=Y*L;五、实验结果考虑[0.0,1.2]上的曲线)cos()(x x f y ==。
(1)利用节点0x =0.0和1x =1.2构造线性插值多项式)(1x P ; (2)利用节点0x =0.0,1x =0.8和2x =1.8构造线性插值多项式)(2x P ; (3)利用节点0x =0.0,1x =0.4,2x =0.8和3x =1.2构造线性插值多项式)(3x P 。
解答: (1)输入X=[0.0,1.2]; Y=cos(X);[C,L]=lagran(X,Y)输出 C =-0.5314 1.0000L =-0.8333 1.0000 0.8333 0 则一次逼近函数为15314.0)(1+-=x x P 误差函数为)cos(15314.0)(1x x x E -+-= 函数图像和误差函数图像00.51 1.50.40.50.60.70.80.91-1-0.500.51 1.5-0.16-0.14-0.12-0.1-0.08-0.06-0.04-0.02(2) 输入X=[0.0, 0.6,1.2]; Y=cos(X);[C,L]=lagran(X,Y)输出 C =-0.4004 -0.0508 1.0000 L =1.3889 -2.5000 1.0000 -2.77783.3333 0 1.3889 -0.8333 0则一次逼近函数为10508.04004.0)(22+--=x x x P 误差函数为)cos(10508.04004.0)(22x x x x E -+--= 函数图像和误差函数图像0.510.50.550.60.650.70.750.80.850.90.95100.51-8-6-4-20246810-3(3) 输入X=[0.0,0.4,0.8 1.2]; Y=cos(X);[C,L]=lagran(X,Y)输出 C =0.0922 -0.5651 0.0139 1.0000L =-2.6042 6.2500 -4.5833 1.00007.8125 -15.6250 7.5000 0 -7.8125 12.5000 -3.7500 0 2.6042 -3.1250 0.8333 0 则一次逼近函数为10139.05651.00922.0)(231++-=x x x x P 误差函数为)cos(10139.05651.00922.0)(233x x x x x E -++-=函数图像和误差函数图像0.50.60.70.80.911.11.20.0020.0040.0060.0080.010.0120.014六、实验分析拉格朗日多项式插值模型简单,结构紧凑,是经典的插值法。