拉格朗日插值可以在 O(n2)O(n^2) 的时间之内求解求解一个 nn 次多项式的表达式。

朴素的拉格朗日插值

现在要求解 nn 次函数 f(x)f(x),已知 f(x)f(x) 要过 (x1,y1),(x2,y2),⋯ ,(xn+1,yn+1)(x_1,y_1),(x_2,y_2),\cdots,(x_{n+1},y_{n+1})。

那么考虑构造 n+1n+1 可函数 fi(x)f_i(x) 满足:

{yix=xi0Other wise.\left\{\begin{matrix} y_i & x=x_i\\ 0 & \text{Other wise.} \end{matrix}\right.

那么显然就有:

f(x)=∑i=1n+1fi(x)f(x)=\sum\limits_{i=1}^{n+1} f_i(x)

容易发现通过以下方式构造的 fi(x)f_i(x) 满足要求:

fi(x)=yi×∏j=1∧j≠in+1x−xjxi−xjf_i(x)=y_i\times \prod\limits_{j=1\wedge j\ne i}^{n+1}\frac{x-x_j}{x_i-x_j}

所以最后就得到了:

f(x)=∑i=1n+1(yi×∏i=1n+1x−xjxi−xj)f(x)=\sum\limits_{i=1}^{n+1} (y_i\times \prod\limits_{i=1}^{n+1} \frac{x-x_j}{x_i-x_j})

横坐标是连续整数的拉格朗日插值

对于 ∀i∈[1,n+1]∩Z∣xi=i\forall i\in[1,n+1]\cap\mathbb{Z}\mid x_i=i 的情况,将其带入上式得到:

f(x)=∑i=1n+1(yi×∏i=1∧i≠jn+1x−ji−j)f(x)=\sum\limits_{i=1}^{n+1}(y_i\times \prod\limits_{i=1\wedge i\ne j}^{n+1}\frac{x-j}{i-j})

然后经过一些神奇的化简得到:

f(x)=∑i=1n+1(−1)n+1−i×yi×∏i=1n+1(x−j)(i−1)!×(n+1−i)!×(x−i)f(x)=\sum\limits_{i=1}^{n+1}(-1)^{n+1-i}\times y_i\times \frac{\prod\limits_{i=1}^{n+1}(x-j)}{(i-1)!\times (n+1-i)!\times (x-i)}