拉格朗日多项式插值

更新时间:2023-11-02 12:27:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

拉格朗日多项式插值法浅析

摘要

拉格朗日插值多项式是一种最常见的多项式插值法,也是一种最常用的逼近工具。“学以致用 ”是每一门学科都致力追求的境界,数学自然也不例外。下面,探讨拉格朗日插值法的基本原理、如何构造拉格朗日多项式、拉格朗日多项式的误差界,并用 MATLAB程序来实现这一数学算法的自动化,为复杂的分析研究提供了一条数学算法的捷径。

【关键词】:拉格朗日多项式 算法实现 MATLAB

在科学研究和实际的工程设计中,几乎所有的问题都可以用y?f(x)来表示其某种内在规律的数量关系。但理想化的函数关系在实际工程应用中是很难寻找 的,对于那些没有明显解析式的函数关系表达式则只能通过实验观察的数据,利用多项式对某一函数的进行逼近,使得这个逼近函数能够反映f(x)的特性,而且利用多项式就可以简便的计算相应的函数值。例如我们不知道气温随日期变化的具体函数关系,但是我们可以测量一些孤立的日期的气温值,并假定此气温随日期变化的函数满足某一多项式。这样,利用已经测的数据,应用待定系数法便可以求得一个多项式函数f(x)。应用此函数就可以计算或者说预测其他日期的气温值。一般情况下,多项式的次数越多,需要的数据就越多,而预测也就越 准确。当然,构造组合多项式方法比较多,如线性方程求解、拉格朗日系数多项式以及构造牛顿多项式的分段差分和系数表等等,这里只对拉格朗日多项式插值法进行深入探讨。

一、拉格朗日多项式插值算法基本原理

函数y?f(x)在区间[a,b]上有定义,在是[ a,b]上取定的 N + 1个互异节点, 且在这些点处的函数值f(x0) , f(x1) ,…,f(xn)为已知, 即 yi =f (xi ) , (i?0,1...N),若存在一个和f(x)近似的函数PN(x),满足

PN(xi)?f(xi) (i?0,1...N) (1)

则称 φ(x) 为 f (x) 的一个插值函数, 点xi为插值节点,(1)称为插值条件, 区间[a,b]称为插值区间, 而误差函数EN?f(x)?PN(x)称为插值余项。即是求一个不超过N次多项式PN(x)?aNxN?aN?1xN?1?...?a1x?a0 (i?0,1...N)

满足 PN(xi)?f(xi) (i?0,1...N)

则PN(x)成为f(x)的N次拉格朗日插值多项式。

二、拉格朗日插值多项式的构造

1、线性插值

当 n = 1时即为线性插值, 这也是代数插值最简单的形式。

根据给定函数f(x)在两个互异节点x1、x2的值f(x1)、f(x2),用线性函数

P(x)?ax?b来近似代替f(x)。

由点斜式直线方程可得:

P(x)?y0?(y1?y0)公式(1)可整理写成:

P1(x)?y0x?x0x?x1?y1 (3) x0?x1x1?x0x?x0 (2) x1?x0式(2)的右端的每一项都包含了一个线性因子,记 L1,0(x)?x?x0x?x1 L1,1(x)? (4) x0?x1x1?x0很容易看出来,L1,0(x0)?L1,1(x1)?1,L1,0(x1)?L1,1(x0)?0,因此式(3)中的多项式p1(x)也给定两个定点:

P1(x0)?y0?y1(0)?y0 P1(x1)?y0(0)?y1?y1 (5)

式(3)中的项L1,0(x)和L1,1(x)称为基于节点x0和x1的拉格朗日系数多项式(线性插值基函数)。利用这种记法,式(2)可以记为和式: P1(x)?也可以写成如下的矩阵:

1?yk?0kL1,k(x) (6)

P1(x)??y0x1??1??x0?x1x0?x1??x????y1??x0??1??1? (7) ?x?xx?x?10??102、二次插值

当 n = 1时即为线性插值, 这也是常用代数插值。

根据给定函数f(x)在两个互异节点x1、x2、x3的值f(x1)、f(x2)、f(x3),

构造次数不超过二次的多项式 P2(x)?ax2?bx?c来近似代替f(x)。使满足二次插值条件P2(xi)?f(xi)(i?0,1,2)。p2(x)的参数直接由插值条件决定,并满足下面方程组:

?ax02?bx0?c?y0?2ax?bx1?c?y1 (6) ?1?ax2?bx?c?y212?仿线性插值,用基函数的方法求解方程组。求二次式L0(x0)?1,L0(x1)?0,

L0(x2)?0,因x1、x2是L0(x)的两个零点,因此设L0(x)?m(x?x1)(x?x2),又L0(x0)?1,确定系数c=

1,从而导出:

(x0?x1)(x0?x2)(x?x1)(x?x2) (7)

(x0?x1)(x0?x2) L0(x)?同理,构造出条件满足L1(x0)?0,L1(x1)?1,L1(x2)?0的插值多项式

L1(x)?(x?x0)(x?x2) (8)

(x1?x)(x1?x2)0构造出条件满足L2(x0)?0,L2(x1)?0,L2(x2)?1的插值多项式

L2(x)?(x?x0)(x?x1) (9)

(x2?x0)(x2?x1)式(7)(8)(9)中的项L0(x)、L1(x)和L2(x)称为基于节点x0、x1和x3的拉格朗日系数多项式(二次插值基函数)。利用这种记法,相应的有: P2(x)?也可以写成如下的矩阵:

2?yk?0kL1,k(x) (10)

P2??y0y1?1??(x0?x1)(x0?x2)?1y2???(x1?x0)(x1?x2)1??(x?x)(x?x)1?202?x1?x2(x0?x1)(x0?x2)x0?x2?(x1?x0)(x1?x2)x0?x1?(x2?x0)(x2?x1)?x1x2?(x0?x1)(x0?x2)??x2????x0x2??x?(x1?x0)(x1?x2)???1x0x1???(x2?x0)(x2?x1)??

3、N次插值

当插值点增加到 N+ 1个时, 就可以通过 N+ 1个不同的已知点(xi,yi) 来构造一个次数为n的代数多项式 P (x)。类似二次插值, 先构造一个特殊的 n 次多项式Li(x),使其各点满足Lk(x0)?Lk(x1)?...?Lk(xk?1)?0,Lk(xk)?1,

Lk?1(xk?1)?...?Lk(xn)?0,因x1、x2…xn是Lk(x)的N个零点,因此设Lk(x)?mk(x?x1)(x?x2)...(x?xk?1)(x?xk?1)...(x?xn),又Lk(xk)?1,确定系数

mk?1,从而导出:

(x0?x1)(x0?x2) LN,k(x)?相应的有:

(x?x1)(x?x2)...(x?xk?1)(x?xk?1)...(x?xn) (12)

(xk?x1)(xk?x2)...(xk?xk?1)(xk?xk?1)...(x?xn) PN(x)?也可以写成如下的矩阵:

?yk?0NkL1,k(x) (13)

PN??y0x1?x2???xN1??(x0?x1)?(x0?xN)?(x0?x1)?(x0?xN)?x0?x2???xN1y1...yN??(x?x)?(x?x)(x1?x0)?(x1?xN)1N?10???x1?x2???xN?11??(x?x)?(x?x)(x?x)?(x?x)NN?1N0NN?1?N0????x1x2?xN??(x0?x1)?(x0?xn)??xN???N?1?x0x2?xN??x?(x1?x0)?(x1?xN)??????????x0x1?xN?1??1?(xN?x0)?(xN?xN?1)??

4、Lagrange插值余项

设f?CN?1[a,b],且x0,x1,x2,...,xN?[a,b]为N+1个节点。如果x?[a,b],则

f(x)?PN(x)?EN(x) (14)

其中PN(x)是可以用来逼近f(x)的多项式:

f(x)?PN(x)??f(xk)LN,k(x) (15)

k?0N误差项EN(x)形如

(x?x0)(x?x1)...(x?xN)f EN(x)?(N?1)!C为区间[a,b]内的某个值。

N?1(c) (16)

三、拉格朗日多项式插值实现流程

1、根据初始数据X的取值求出相应的Y值; 2、建立W*W的矩阵;

3、利用卷积公式计算基于节点的Lagrange系数矩阵; 4、求PN(x)??ykLN,k(x)

k?0N四、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~=j

V=conv(V,poly(X(j)))/(X(k)-X(j)); end end

L(k,:)=V; end C=Y*L;

五、实验结果

考虑[0.0,1.2]上的曲线y?f(x)?cos(x)。

(1)利用节点x0=0.0和x1=1.2构造线性插值多项式P1(x); (2)利用节点x0=0.0,x1=0.8和x2=1.8构造线性插值多项式P2(x); (3)利用节点x0=0.0,x1=0.4,x2=0.8和x3=1.2构造线性插值多项式P3(x)。 解答: (1)输入

X=[0.0,1.2]; Y=cos(X);

[C,L]=lagran(X,Y)

输出 C =

-0.5314 1.0000

L =

-0.8333 1.0000 0.8333 0 则一次逼近函数为P1(x)??0.5314x?1 误差函数为E1(x)??0.5314x?1?cos(x) 函数图像和误差函数图像

10-0.02-0.04-0.060.7-0.080.6-0.10.5-0.12-0.14-0.16-10.90.80.400.511.5-0.500.511.5

(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.7778 3.3333 0 1.3889 -0.8333 0

则一次逼近函数为P2(x)??0.4004x2?0.0508x?1 误差函数为E2(x)??0.4004x2?0.0508x?1?cos(x) 函数图像和误差函数图像

10.950.90.850.820.7500.70.650.60.550.500.51-2-4-6-810864x 10-300.51

(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.0000

L =

-2.6042 6.2500 -4.5833 1.0000

7.8125 -15.6250 7.5000 0 -7.8125 12.5000 -3.7500 0 2.6042 -3.1250 0.8333 0 则一次逼近函数为P1(x)?0.0922x3?0.5651x2?0.0139x?1 误差函数为E3(x)?0.0922x3?0.5651x2?0.0139x?1?cos(x)

函数图像和误差函数图像

1.20.0141.10.01210.010.90.0080.80.0060.70.0040.60.0020.500.51000.51

六、实验分析

拉格朗日多项式插值模型简单,结构紧凑,是经典的插值法。这种算法模型在科学的各个领域都有良好的应用。但是由于拉格朗日的插值多项式和每个节点 都有关,当改变节点个数时,需要重新计算。

一般情况下,多项式的次数越多,需要的数据就越多,误差就越小,从而预测也就越准确。例外发生了,龙格在研究多项式插值的时候,发现有的情况下,并非取节点越多多项式就越精确。著名的例子是y?1,它的插值

(1?12x2)函数在两个端点处发生剧烈的波动,造成较大的误差。研究发现,是舍入误差造成的。

1086420-2-5-4-32-2-1012345y?1(1?12x)的多项式逼近,基于[-1,1]的等距离节点

七、总结

本学期学习了数值方法这门学科,对我来说是非常欣喜的。它让我知道了高等代数和数学分析不光是纯理论,是可以用于实践生活中的。也让我感受到了数学的魅力,算法的强大。这门课程是为数不多的用理论解决实际问题的课程,这让我在枯燥的数学理论学习中,看到了数学应用的曙光,也感受到了数学的前景。在这门课的学习中,我始终是兴奋的。因为这门课很多的知识都是在数学分析中学过的,这让我非常有成就感。当然,老师在课堂中,时不时的给我们注入数学思想,提高我们的科研能力,对我们在以后的学习和工作中是有极大的帮助的,在这里,请允许我真诚的说句感谢!

这本书的第一章主要讲了函数的分析性质和二进制的基础,这里介绍了用于多项式计算的霍纳方法,也就是嵌套乘法。

第二章主要讲方程f(x)?0的解法,主要介绍了不动点迭代法、波尔查诺二分法和牛顿-拉夫森割线法。其实这三个方法在数学分析中是有接触的。不动点迭代法和牛顿-拉夫森割线法在证明递推函数的收敛性经常会用到,二分法也就是零点定理。所以,这章学习起来也是非常容易的。迭代法必须知道迭代公式

pn??g(pn)和给出初始值,再进行逐步迭代,在做一些函数时,是非常慢的。

二分法是需要在某个区间,端点函数值异号时可用,但不能求重根而且收敛速度慢。割线法收敛速度快,但在f的导数为0时,则可能存在被零除错误。所以每种方法都有它的优缺点,在应用时依情况而定。

第四章主要讲了插值与多项式逼近,讲了泰勒级数逼近、拉格朗日多项式逼近和牛顿多项式逼近。泰勒级数要求函数存在n阶导数,从而寻找解析函数在区间的精确逼近多项式,当x远离x0时,误差会很多。拉格朗日多项式简单易懂, 但是由于拉格朗日的插值多项式和每个节点都有关,当改变节点个数时,需要重新计算,并且在次数较高时,在端点处会剧烈的震荡,也就是我们常说的龙格现象。牛顿多项式把pN与pN?1通过递推关系联系起来了,不需要每个节点都重新计算,并且在进行人工计算是也是有很好的操作性的。

第五章讲曲线拟合,主要讲了最小二乘法和样条插值函数。最小二乘法在高等代数的选学部分有一定得接触,哪里讲的是线性方程的最小二乘法,在这一章线性方程的最小二乘法更深入的讲解,并且也介绍了y?ceAx型的幂函数的最小二乘法。线性二乘法拟合主要是根据已知条件,确定最佳的系数进行拟合。样条插值函数主要是利用分段函数在端点处的4个条件来进行拟合。

总之,通过这一学期的学习,对“函数”这个词有了不同的见解,函数是从初中到现在一直接触的,在研究函数分析性质时,总是机械的分析,从来没有深入的去想为什么要去研究函数,研究函数到底有什么用处,更别说去想在生活中怎么应用函数了。特别在样条插值函数拟合时就有很大的感触,通过4个分析性质就可以解决这么大的难题,我想我刚学习的时候,只能用目瞪口呆来形容。通过数值方法我似乎有了些其他的想法。

本文来源:https://www.bwwdw.com/article/5at2.html

Top