问题描述
给出 \(n + 1\) 个二维平面上的点对 \((x_0, y_0), (x_1, y_1), (x_2, y_2), \cdots, (x_{n}, y_{n})\) ,求一个经过这些点的不超过 \(n\) 次的多项式 \(P(x) = p_{n} \cdot x^{n} + p_{n - 1} \cdot x^{n - 1} + p_{n - 2} \cdot x^{n - 2} + \cdots + p_{1} \cdot x + p_{0}\) ,也就是 \(P(x_i) = y_i\) 。这个多项式是唯一的。
这个过程叫做插值,也是从多项式的点值表达转换成系数表达的问题。
注:这里使用从0开始的下标是为了让点的下标和多项式系数的下标还有 \(x\) 的幂次显得整齐,下面的代码中的下标不一定是从0开始的。
解决思路
拉格朗日插值
由这 \(n + 1\) 个点,可以构造对应的 \(n + 1\) 个多项式,其中第 \(i\) 的多项式的形式为:
\[l_i(x) = \prod\limits_{j = 0, \; j \neq i}^{n} \frac{(x - x_j)} {(x_i - x_j)} \]把下标为 \(i\) 的点 \(x_i\) 代入,可以得到:
\[\begin{eqnarray} l_i(x_i) &=& \prod\limits_{j = 0, \; j \neq i}^{n} \frac{(x_i - x_j)} {(x_i - x_j)} \nonumber \\ &=& \prod\limits_{j = 0, \; j \neq i}^{n} 1 \nonumber \\ &=& 1 \nonumber \end{eqnarray} \]把给定的点中,下标不为 \(i\) 的某个点 \(x_{j0}\) 代入,可以得到:
\[ \begin{eqnarray} l_i(x_{j0}) &=& \prod\limits_{j = 0, \; j \neq i}^{n} \frac{(x_{j0} - x_j)} {(x_i - x_j)} \nonumber \\ &=& 0 \nonumber \end{eqnarray} \]因为分子部分总存在 $ (x_{j0} - x_{j0}) = 0 $ 所以上式为 \(0\) 。
把不在给定的点中的任意点 \(x\) 代入,显然有 \(n\) 项,所以,这是一个 \(n\) 次的多项式。
于是,把上面的 \(n + 1\) 个不同的 \(l_i(x)\) 和 \(y_i\) 相乘,再相加,即可构造下面的多项式:
\[L(x) = \sum\limits_{i = 0}^{n} y_i \cdot l_i(x) \]由上面的推理可知, $ L(x_i) = y_i $ ,并且 \(L(x_i)\) 是一个不超过 \(n\) 次的多项式(由于最高次的系数可能会被抵消,导致次数降低)。
由唯一性定理可知,这个 \(L(x)\) 就是我们要找的 \(P(x)\) ,即
\[P(x) = L(x) \]牛顿插值
多项式快速插值
高斯消元
求解未知数为 \(p_i, i = 0, 1, 2, \cdots, n\) 的方程组
\[\begin{bmatrix} x_0^{n} & x_0^{n - 1} & x_0^{n - 2} & \cdots & x_0 \\ x_1^{n} & x_1^{n - 1} & x_1^{n - 2} & \cdots & x_1 \\ x_2^{n} & x_2^{n - 1} & x_2^{n - 2} & \cdots & x_2 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ x_{n}^{n} & x_{n}^{n - 1} & x_{n}^{n - 2} & \cdots & x_{n} \end{bmatrix} = \begin{bmatrix} y_0 \\ y_1 \\ y_2 \\ \vdots \\ y_{n} \end{bmatrix} \]利用高斯消元在 \(O(n^3)\) 时间内求出这个方程组的解。
引申阅读
重心拉格朗日插值法、差分法、龙格现象
https://www.luogu.com.cn/problem/solution/P4781
标签:下标,插值,多项式,j0,cdot,cdots,数学 From: https://www.cnblogs.com/purinliang/p/18127416