拉格朗日插值
拉格朗日插值
拉插作用
已知n+1个点值,即
求n次多项式 f ,(或求f(x)的值)
设 \(L_i(x)\) 是一个 \(n\) 次多项式,且满足
$ \begin{cases}
L_i(x_i)=y_i\
L_i(x_j)=0\ \ \ (i\not=j)
\end{cases}$
可以考虑先构造 \(L_i'(x)\),使其满足
$ \begin{cases}
L_i(x_i)=1\
L_i(x_j)=0\ \ \ (i\not=j)
\end{cases} \(
那么
\)L_i=y_iL_i'$
可以得出 \(L_i'(x)\) 可以是下面的多项式:
\(\frac{\prod\limits^{n+1}_{j=1}{(x-x_j)(i\neq j)}}{\prod\limits^{n+1}_{j=1}{(x_i-x_j)(i\neq j)}}\)
(如果把\(x_j(i \neq j)\)带进去,分母出现0, 如果把\(x_i\)带进去,分子等于分母,即\(L_i'(x_i) = 1\))
那么 \(L_i(x)\) 就应该是\(y_iL_i'\):
\(yi\frac{\prod\limits^{n+1}_{j=1}{(x-x_j)(i\neq j)}}{\prod\limits^{n+1}_{j=1}{(x_i-x_j)(i\neq j)}}\)
因为 \(L=\sum\limits^{n+1}_{i=1}{L_i}\),所以 \(L(x)\) 应该为:
\(\sum\limits^{n+1}_{i=1}{(y_i{\frac{\prod\limits^{n+1}_{j=1}{(x-x_j)(i\neq j)}}{\prod\limits^{n+1}_{j=1}{(x_i-x_j)(i\neq j)}}})}\)
复杂度:\(O(n^2)\)
特别的,如果 \(x_i + 1 = x_{i+1}\), 求\(L(x)\)的值时
\(L_i'(x)\) 分母可表示为
分子可以表示为 (???)
再带回即可
复杂度:O(n)
多项式科技优化拉插
闲话:本来以为不可能用到这种屎的,就算遇到了也不会去写,直到我在打 ACM 的时候遇到了,还有半个小时,而且是在打印了多项式板子的情况下,其实是有机会冲一冲的,但是思考怎么优化浪费了大量时间。。。故现在来整理这个东西。
复杂度 \(O(n\log^2 n)\),适用于一般情况。
考虑优化拉插的式子:\(\sum\limits^{n+1}_{i=1}{(y_i{\frac{\prod\limits^{n+1}_{j=1}{(x-x_j)(i\neq j)}}{\prod\limits^{n+1}_{j=1}{(x_i-x_j)(i\neq j)}}})}\)
把分子分母分开考虑,先考虑处理分母:\({\prod\limits^{n+1}_{j=1}{(x_i-x_j)(i\neq j)}}\)
设 \(G(x) = {\prod\limits^{n+1}_{j=1}{(x-x_j)}}\),原式等于 $G(x) \over (x_i - x_i) $ = \(\lim _{x -> x_i}{G(x)\over x - x_i}\)。
分母除 0 肯定炸了,但是根具洛必达定理,上式等于 \(G'(x)\)。G 可以用分治地多项式求出。(先求出前 n / 2 项的多项式,再求后 n / 2 项的多项式,然后用 NTT 乘起来)
原式等于
现在可以对 G 做多项式多点求值,对右边做一个前缀乘上一个后缀。然后就做完了。
但这里还有更简单做法:
把 \(y_i\over G'(x)\) 设为 \(a_i\)。
要求:
可以先求:
那么要求的就是:

浙公网安备 33010602011771号