博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
拉格朗日插值法(图文详解)
阅读量:4550 次
发布时间:2019-06-08

本文共 2828 字,大约阅读时间需要 9 分钟。

在中,拉格朗日插值法是以十八世纪命名的一种方法。许多实际问题中都用来表示某种内在联系或规律,而不少函数都只能通过实验和观测来了解。如对实践中的某个量进行观测,在若干个不同的地方得到相应的观测值,拉格朗日插值法可以找到一个,其恰好在各个观测的点取到观测到的值。这样的多项式称为拉格朗日(插值)多项式。上来说,拉格朗日插值法可以给出一个恰好穿过二维上若干个已知点的多项式函数。拉格朗日插值法最早被数学家于1779年发现,不久后(1783年)由再次发现。1795年,拉格朗日在其著作《师范学校数学基础教程》中发表了这个插值方法,从此他的名字就和这个方法联系在一起

对于给定的若n+1个点(x_{0},y_{0}),(x_{1},y_{1}),\ldots ,(x_{n},y_{n}),对应于它们的次数不超过n的拉格朗日多项式\scriptstyle L只有一个。如果计入次数更高的多项式,则有无穷个,因为所有与\scriptstyle L相差\lambda (x-x_{0})(x-x_{1})\ldots (x-x_{n})的多项式都满足条件。例子:

已知平面上四个点:
(-9, 5),
(-4, 2)
(-1, -2)
(7, 9),拉格朗日多项式:
Lx(黑色)穿过所有点。而每个基本多项式:

 

以及
各穿过对应的一点,并在其它的三个点的
x值上取零。

定义

对某个多项式,已知有给定的k + 1个取值点:

(x_{0},y_{0}),\ldots ,(x_{k},y_{k})

其中x_{j}对应着的位置,而y_{j}对应着函数在这个位置的取值。

假设任意两个不同的xj都互不相同,那么应用拉格朗日插值公式所得到的拉格朗日插值多项式为:

L(x):=\sum _{​{j=0}}^{​{k}}y_{j}\ell _{j}(x)

其中每个\ell _{j}(x)拉格朗日基本多项式(或称插值基函数),其表达式为:

\ell _{j}(x):=\prod _{​{i=0,\,i\neq j}}^{​{k}}{\frac  {x-x_{i}}{x_{j}-x_{i}}}={\frac  {(x-x_{0})}{(x_{j}-x_{0})}}\cdots {\frac  {(x-x_{​{j-1}})}{(x_{j}-x_{​{j-1}})}}{\frac  {(x-x_{​{j+1}})}{(x_{j}-x_{​{j+1}})}}\cdots {\frac  {(x-x_{​{k}})}{(x_{j}-x_{​{k}})}}.

拉格朗日基本多项式\ell _{j}(x)的特点是在x_{j}上取值为1,在其它的点x_{i},\,i\neq j上取值为0

范例

假设有某个二次多项式函数f,已知它在三个点上的取值为:

  • f(4)=10
  • f(5)=5.25
  • f(6)=1

要求f(18)的值。

首先写出每个拉格朗日基本多项式:

\ell _{0}(x)={\frac  {(x-5)(x-6)}{(4-5)(4-6)}}
\ell _{1}(x)={\frac  {(x-4)(x-6)}{(5-4)(5-6)}}
\ell _{2}(x)={\frac  {(x-4)(x-5)}{(6-4)(6-5)}}

然后应用拉格朗日插值法,就可以得到p的表达式(p为函数f的插值函数):

p(x)=f(4)\ell _{0}(x)+f(5)\ell _{1}(x)+f(6)\ell _{2}(x)
.\,\,\,\,\,\,\,\,\,\,=10\cdot {\frac  {(x-5)(x-6)}{(4-5)(4-6)}}+5.25\cdot {\frac  {(x-4)(x-6)}{(5-4)(5-6)}}+1\cdot {\frac  {(x-4)(x-5)}{(6-4)(6-5)}}
.\,\,\,\,\,\,\,\,\,\,={\frac  {1}{4}}(x^{2}-28x+136)

此时代入数值\ 18就可以求出所需之值:\ f(18)=p(18)=-11

证明

存在性

对于给定的k+1个点:(x_{0},y_{0}),\ldots ,(x_{k},y_{k}),拉格朗日插值法的思路是找到一个在一点x_{j}取值为1,而在其他点取值都是0的多项式\ell _{j}(x)。这样,多项式y_{j}\ell _{j}(x)在点x_{j}取值为y_{j},而在其他点取值都是0。而多项式L(x):=\sum _{​{j=0}}^{​{k}}y_{j}\ell _{j}(x)就可以满足

L(x_{j})=\sum _{​{i=0}}^{​{k}}y_{i}\ell _{i}(x_{j})=0+0+\cdots +y_{j}+\cdots +0=y_{j}

在其它点取值为0的多项式容易找到,例如:

(x-x_{0})\cdots (x-x_{​{j-1}})(x-x_{​{j+1}})\cdots (x-x_{​{k}})

它在点x_{j}取值为:(x_{j}-x_{0})\cdots (x_{j}-x_{​{j-1}})(x_{j}-x_{​{j+1}})\cdots (x_{j}-x_{​{k}})。由于已经假定x_{i}两两互不相同,因此上面的取值不等于0。于是,将多项式除以这个取值,就得到一个满足“在x_{j}取值为1,而在其他点取值都是0的多项式”:

\ell _{j}(x):=\prod _{​{i=0,\,i\neq j}}^{​{k}}{\frac  {x-x_{i}}{x_{j}-x_{i}}}={\frac  {(x-x_{0})}{(x_{j}-x_{0})}}\cdots {\frac  {(x-x_{​{j-1}})}{(x_{j}-x_{​{j-1}})}}{\frac  {(x-x_{​{j+1}})}{(x_{j}-x_{​{j+1}})}}\cdots {\frac  {(x-x_{​{k}})}{(x_{j}-x_{​{k}})}}

这就是拉格朗日基本多项式。

唯一性

次数不超过k的拉格朗日多项式至多只有一个,因为对任意两个次数不超过k的拉格朗日多项式:P_{1}P_{2},它们的差P_{1}-P_{2}在所有k+1个点上取值都是0,因此必然是多项式(x-x_{0})(x-x_{​{1}})\cdots (x-x_{​{k}})的倍数。因此,如果这个差P_{1}-P_{2}不等于0,次数就一定不小于k+1。但是P_{1}-P_{2}是两个次数不超过k的多项式之差,它的次数也不超过k。所以P_{1}-P_{2}=0,也就是说P_{1}=P_{2}。这样就证明了唯一性

几何性质

拉格朗日插值法中用到的拉格朗日基本多项式\ell _{0},\ell _{1},\cdots ,\ell _{n}(由某一组x_{0}<x_{1}<\cdots <x_{n}确定)可以看做是由次数不超过n的多项式所组成的:{\mathbb  {K}}_{n}[X]的一组。首先,如果存在一组:\lambda _{0},\lambda _{1},\cdots ,\lambda _{n}使得,

P=\lambda _{0}\ell _{0}+\lambda _{1}\ell _{1}+\cdots +\lambda _{n}\ell _{n}=0

那么,一方面多项式P是满足P(x_{0})=\lambda _{0},P(x_{1})=\lambda _{1},\cdots ,P(x_{n})=\lambda _{n}的拉格朗日插值多项式,另一方面P是零多项式,所以取值永远是0。所以

\lambda _{0}=\lambda _{1}=\cdots =\lambda _{n}=0

这证明了\ell _{0},\ell _{1},\cdots ,\ell _{n}是的。同时它一共包含n+1个多项式,恰好等于{\mathbb  {K}}_{n}[X]的维数。所以\ell _{0},\ell _{1},\cdots ,\ell _{n}构成了{\mathbb  {K}}_{n}[X]的一组基底。

拉格朗日基本多项式作为基底的好处是所有的多项式都是齐次的(都是n次多项式)。

优点与缺点

拉格朗日插值法的公式结构整齐紧凑,在理论分析中十分方便,然而在计算中,当插值点增加或减少一个时,所对应的基本多项式就需要全部重新计算,于是整个公式都会变化,非常繁琐。这时可以用重心拉格朗日插值法或来代替。此外,当插值点比较多的时候,拉格朗日插值多项式的次数可能会很高,因此具有的特点,也就是说尽管在已知的几个点取到给定的数值,但在附近却会和“实际上”的值之间有很大的偏差(如右下图)。这类现象也被称为,解决的办法是分段用较低次数的插值多项式。

重心拉格朗日插值法

重心拉格朗日插值法是拉格朗日插值法的一种改进。在拉格朗日插值法中,运用多项式

\ell (x)=(x-x_{0})(x-x_{1})\cdots (x-x_{k})
拉格朗日插值法的数值稳定性:如图,用于模拟一个十分平稳的函数时,插值多项式的取值可能会突然出现一个大的偏差(图中的14至15中间)

可以将拉格朗日基本多项式重新写为:

\ell _{j}(x)={\frac  {\ell (x)}{x-x_{j}}}{\frac  {1}{\prod _{​{i=0,i\neq j}}^{k}(x_{j}-x_{i})}}

定义重心权

w_{j}={\frac  {1}{\prod _{​{i=0,i\neq j}}^{k}(x_{j}-x_{i})}}

上面的表达式可以简化为:

\ell _{j}(x)=\ell (x){\frac  {w_{j}}{x-x_{j}}}

于是拉格朗日插值多项式变为:

L(x)=\ell (x)\sum _{​{j=0}}^{k}{\frac  {w_{j}}{x-x_{j}}}y_{j}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (1)

即所谓的重心拉格朗日插值公式(第一型)或改进拉格朗日插值公式。它的优点是当插值点的个数增加一个时,将每个w_{j}都除以(x_{j}-x_{​{k+1}}),就可以得到新的重心权w_{​{k+1}},计算复杂度为{\mathcal  O}(n),比重新计算每个基本多项式所需要的复杂度{\mathcal  O}(n^{2})降了一个量级。

将以上的拉格朗日插值多项式用来对函数g(x)\equiv 1插值,可以得到:

\forall x,\,g(x)=\ell (x)\sum _{​{j=0}}^{k}{\frac  {w_{j}}{x-x_{j}}}

因为g(x)\equiv 1是一个多项式。

因此,将L(x)除以g(x)后可得到:

L(x)={\frac  {\sum _{​{j=0}}^{k}{\frac  {w_{j}}{x-x_{j}}}y_{j}}{\sum _{​{j=0}}^{k}{\frac  {w_{j}}{x-x_{j}}}}}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (2)

这个公式被称为重心拉格朗日插值公式(第二型)或真正的重心拉格朗日插值公式。它继承了(1)式容易计算的特点,并且在代入x值计算L(x)的时候不必计算多项式\ell (x)。它的另一个优点是,结合进行插值的话,可以很好地模拟给定的函数,使得插值点个数趋于无穷时,最大偏差趋于零。同时,重心拉格朗日插值结合进行插值可以达到极佳的数值稳定性。第一型拉格朗日插值是的,而第二型拉格朗日插值是向前稳定的,并且很小

参考来源

  1.  E. Waring. Problems Concerning Interpolations. Philosophical Transactions of the Royal Society of London. 1779, 69: 59–67.
  2.  (英文)E. Meijering. A chronology of interpolation: From ancient astronomy to modern signal and image processing,. Proceedings of the IEEE: 323.
  3.  (英文)Julius Orion Smith III. . Center for Computer Research in Music and Acoustics (CCRMA), Stanford University.
  4.  冯有前,《数值分析》,第63页
  5.  李庆扬,《数值分析》第4版,第31页
  6.  冯有前,《数值分析》,第64页
  7. ^     Jean-Paul Berrut, Lloyd N. Trefethen. .  Review. 2004, 46 (3): 501–517.:.
  8.  王兆清,李淑萍,唐炳涛. 一维重心型插值:公式、算法和应用. 山东建筑大学学报. 2007, 22 (5): 447–453.
  9.  NICHOLAS J. HIGHAM. . IMA Journal of Numerical Analysis. 2004, 24 (4): 547–556.
  • (中文)李庆扬,王能超,易大义. 《数值分析》第4版. 清华大学出版社. 2001.  .
  • (中文)冯有前. 《数值分析》. 清华大学出版社. 2001.  .
  • (中文). 太原理工大学.

转载于:https://www.cnblogs.com/ECJTUACM-873284962/p/6833391.html

你可能感兴趣的文章
STL系列 list
查看>>
NAT穿透
查看>>
[VC] 枚举ActiveX控件的 CLSID 和 implemented/required CATIDs 的小工具
查看>>
匿名方法和Lambda表达式
查看>>
Spark编译的三种方式
查看>>
京东的核心业务
查看>>
读书笔记(六)--成交
查看>>
Secret Number hdu 2113
查看>>
软件架构(体系结构,Architecture)和软件框架
查看>>
阶梯博弈(没怎么搞懂)
查看>>
python request post请求body中有json数组
查看>>
IDT hook KiTrap03
查看>>
字节对齐
查看>>
使用Python SocketServer快速实现多线程网络服务器
查看>>
离散数学
查看>>
外观模式理解和示例
查看>>
IDEA远程仓库版本回滚
查看>>
C++矩阵库 Eigen 简介(转载)
查看>>
sklearn的train_test_split()各函数参数含义解释(非常全)
查看>>
机器学习算法的整体流程(非常易懂)
查看>>