目标
- 理解插值
- 推导牛顿插值公式
- 推导拉格朗日插值公式
- 应用插值方法解决问题
- 使用插值找到离散函数的导数和积分
资源
插值 是从一组离散数据点中推导出一个简单函数的过程,使该函数通过所有给定的数据点(即精确地再现数据点),并可用于估计给定数据点之间的其他数据点。 这是必要的,因为在科学和工程中,我们经常需要处理离散的实验数据。 插值还用于通过对数据点进行采样并使用更简单的函数对其进行插值来简化复杂的函数。 多项式通常用于插值,因为它们更容易计算、微分和积分 - 称为 多项式插值。
可以证明,给定 n+1 个数据点,总能找到一个 n 阶/度多项式来通过/再现这 n+1 个点。
给定 n+1 个数据点,直接法假设以下多项式
 
对于  的 n+1 个值和相应的
 的 n+1 个值和相应的  的 n+1 个值,我们可以通过解 n+1 个联立线性方程组来求解
 的 n+1 个值,我们可以通过解 n+1 个联立线性方程组来求解  ,这被称为直接法。
,这被称为直接法。
例如,给定两个数据点  和
 和  ,我们可以使用线性函数
,我们可以使用线性函数  来通过这两个数据点
 来通过这两个数据点
 
 
一旦我们求解了  和
 和  (
( 的系数),我们可以使用该函数作为插值的依据——估计其间的缺失数据点。
 的系数),我们可以使用该函数作为插值的依据——估计其间的缺失数据点。
在牛顿法中,插值函数以 牛顿多项式(又称牛顿形式)的形式写出。例如,给定一个数据点  ,我们只能推导出一个零阶多项式:
,我们只能推导出一个零阶多项式:  。因为
。因为  ,零阶牛顿多项式为
,零阶牛顿多项式为  。
。
给定两个数据点,我们可以将牛顿多项式写成  的形式。将两个数据点代入,得到
 的形式。将两个数据点代入,得到
 
 
显然,该函数通过这两个数据点(即准确地再现了这两个数据点)。该函数在  处的导数为
 处的导数为  ,与前向差分法的结果一致。
,与前向差分法的结果一致。
给定三个数据点,我们可以将牛顿多项式写成
 
将三个数据点代入,得到
- 由于  ,我们得到 ,我们得到 
- 由于  ,我们得到 ,我们得到 
- 由于  
- 我们得到
 
这个三次多项式函数通过所有三个数据点(二阶导数和三阶导数在  和
 和  处与差商法匹配)。
 处与差商法匹配)。
从这两个例子中,我们可以看到牛顿多项式的系数遵循一种称为 差商 的模式。例如, 被称为一阶差商(记为
 被称为一阶差商(记为 ![{\displaystyle f[x_{0},x_{1}]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/a31f8458da9ea4ec290a96134207b45c5d7a4f7c) ),因为它取决于
),因为它取决于  和
 和  。差商符号可以用来写出一般阶(形式)的牛顿多项式
。差商符号可以用来写出一般阶(形式)的牛顿多项式
![{\displaystyle f(x)=f[x_{0}]+f[x_{0},x_{1}](x-x_{0})+f[x_{0},x_{1},x_{2}](x-x_{0})(x-x_{1})+...}](https://wikimedia.org/api/rest_v1/media/math/render/svg/847c840f35a86400cc5ad569d0be1c07888a60af) 
(x-x_{1})(x-x_{2})...(x-x_{n-1})}](https://wikimedia.org/api/rest_v1/media/math/render/svg/58a15892e49e48dcc2f7ed29262bcfb7e0d60634) 
其中
![{\displaystyle a_{0}=f[x_{0}]=y_{0}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/b2c02509aa73c0099d52cc8960bd92a2bc3ab880) ,因为根据定义 ,因为根据定义![{\displaystyle f[x_{i}]=y_{i}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/155fee5ebbf6543462143a8a14da42bcbb14a0a3) 
![{\displaystyle a_{1}=f[x_{0},x_{1}]={\frac {f[x_{1}]-f[x_{0}]}{x_{1}-x_{0}}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/660a4a2e428dcf77e608eb34d84b1620ff670bbe) 
![{\displaystyle a_{2}=f[x_{0},x_{1},x_{2}]={\frac {f[x_{1},x_{2}]-f[x_{0},x_{1}]}{x_{2}-x_{0}}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/9e5444160c9d00979fb313d269235af8495ed87a) 
 
![{\displaystyle a_{k}=f[x_{0},x_{1},x_{2},\dots ,x_{k-1},x_{k}]={\frac {f[x_{1},x_{2},\dots ,x_{k-1},x_{k}]-f[x_{0},x_{1},x_{2},\dots ,x_{k-1}]}{x_{k}-x_{0}}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/84da42b61c710539086966d2306a8e67c0986c3f) 
我们可以使用以下表格计算牛顿多项式的系数。
![{\displaystyle {\begin{matrix}x_{0}&y_{0}=f[x_{0}]&&&\\&&f[x_{0},x_{1}]&&\\x_{1}&y_{1}=f[x_{1}]&&f[x_{0},x_{1},x_{2}]&\\&&f[x_{1},x_{2}]&&f[x_{0},x_{1},x_{2},x_{3}]\\x_{2}&y_{2}=f[x_{2}]&&f[x_{1},x_{2},x_{3}]&\\&&f[x_{2},x_{3}]&&\\x_{3}&y_{3}=f[x_{3}]&&&\\\end{matrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/4d541beb187dfc9af8782f1a13c8a284937cd8af) 
因为
![{\displaystyle f[x_{i}]=y_{i}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/155fee5ebbf6543462143a8a14da42bcbb14a0a3) 
 
![{\displaystyle f[x_{i},x_{i+1}]={\frac {f[x_{i+1}]-f[x_{i}]}{x_{i+1}-x_{i}}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/3abf9e649a77e00375f64531d62502866060bda3) 
下图展示了差商之间的依赖关系。
 
例如,给定数据点  ,
,  ,
,  , 以及
, 以及  ,我们可以绘制以下表格。
,我们可以绘制以下表格。
![{\displaystyle {\begin{array}{|c||c|c|c|c|c|}i&x_{i}&y_{i}&f[x_{i},x_{i+1}]&f[x_{i},x_{i+1},x_{i+2}]&f[x_{i},x_{i+1},x_{i+2},x_{i+3}]\\\hline 0&x_{0}=1&{\begin{aligned}y_{0}&=f[x_{0}]\\&=6\end{aligned}}&{\begin{aligned}f[x_{0},x_{1}]&={\frac {f[x_{1}]-f[x_{0}]}{x_{1}-x_{0}}}\\&={\frac {11-6}{2-1}}\\&=5\end{aligned}}&{\begin{aligned}f[x_{0},x_{1},x_{2}]&={\frac {f[x_{1},x_{2}]-f[x_{0},x_{1}]}{x_{2}-x_{0}}}\\&={\frac {7-5}{3-1}}\\&=1\end{aligned}}&{\begin{aligned}&f[x_{0},x_{1},x_{2},x_{3}]\\&={\frac {f[x_{1},x_{2},x_{3}]-f[x_{0},x_{1},x_{2}]}{x_{3}-x_{0}}}\\&={\frac {1-1}{4-1}}\\&=0\end{aligned}}\\\hline 1&x_{1}=2&{\begin{aligned}y_{1}&=f[x_{1}]\\&=11\end{aligned}}&{\begin{aligned}f[x_{1},x_{2}]&={\frac {f[x_{2}]-f[x_{1}]}{x_{2}-x_{1}}}\\&={\frac {18-11}{3-2}}\\&=7\end{aligned}}&{\begin{aligned}f[x_{1},x_{2},x_{3}]&={\frac {f[x_{2},x_{3}]-f[x_{1},x_{2}]}{x_{3}-x_{1}}}\\&={\frac {9-7}{4-2}}\\&=1\end{aligned}}&\\\hline 2&x_{2}=3&{\begin{aligned}y_{2}&=f[x_{2}]\\&=18\end{aligned}}&{\begin{aligned}f[x_{2},x_{3}]&={\frac {f[x_{3}]-f[x_{2}]}{x_{3}-x_{2}}}\\&={\frac {27-18}{4-3}}\\&=9\end{aligned}}&&\\\hline 3&x_{3}=4&{\begin{aligned}y_{3}&=f[x_{3}]\\&=27\end{aligned}}&&&\\\end{array}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/2b95d23005f4c17a4294dc9c7a8fb4c58e8487ed) 
四个数据点位于一个二阶多项式上,这就是系数  (
(![{\displaystyle f[x_{0},x_{1},x_{2},x_{3}]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/22c97723f190624c9bcfaa90c9ace00dfe10311f) ) 为零。给定
) 为零。给定 ![{\displaystyle [a_{0},a_{1},a_{2}]=[6,5,1]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/babb93ee773e83c7aa69d6ff6861773eadd11160) ,结果多项式为
,结果多项式为
 
求解牛顿多项式的系数后,我们可以对任何  求解多项式函数。牛顿多项式通常被重写成嵌套形式
 求解多项式函数。牛顿多项式通常被重写成嵌套形式
 , ,
因为这种插值多项式的嵌套形式更容易计算,因为 x 只在函数中出现 n 次。
例如,三阶插值多项式的嵌套形式为
 
牛顿法的算法及其实现可以在这个 Jupyter notebook 中找到。
拉格朗日多项式 是另一种用于多项式插值的表达式。它被称为一种表达式,因为对于一组给定的不同点,插值多项式是唯一的。我们可以通过不同的方法得到相同的多项式。
拉格朗日表达式将插值多项式指定为
 
 
其中  是多项式的阶数。
 是多项式的阶数。
例如,给定两个数据点,我们得到  并且
 并且
 
显然,函数曲线经过两个数据点。一阶导数也与差商法的一阶导数一致
 
样条插值 使用多个多项式函数来插值一组数据点,每个多项式对应两个相邻数据点。样条法是必要的,因为当多项式的阶数变大时,多项式插值往往会表现出振荡行为(称为 龙格现象)。以下 iPython 笔记本展示了一个遇到此问题的例子:[1]
样条法不是另一种寻找离散函数的多项式插值的方法,而是使用分段多项式(样条)来避免振荡行为。最常见的样条插值是线性样条、二次样条和三次样条。 线性插值 使用直线连接每对连续数据点,从而形成分段插值。
 
一个 二次样条 使用二次多项式连接连续数据点。
 
如果满足以下条件,则函数 f(x) 是一个二次样条
- f(x) 的定义域为区间 [a, b]。
 和 和 在 [a, b] 上是连续的。 在 [a, b] 上是连续的。
- 数据点  使得 使得 并且 并且 在每个子区间 在每个子区间![{\displaystyle [x_{i},x_{i+1}]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/7138606cdb8eb7dddaba59b5aefe1ade6bc05a1b) 上最多是 2 阶多项式。 上最多是 2 阶多项式。