拉格朗日差值
part 1
拉格朗日插值法,给出 \(n+1\) 个点对,可以 \(O(n^2)\) 求出一个 \(n\) 次多项式的值
我们当前有\(n+1\)个点对,\(x_i,y_i\) , 代表 \(f(x_i)=y_i\)
给出 \(k\) 求 \(f(k)\)
公式为 \(\sum\limits_{i=0}^ny_i*\prod\limits_{j!=i} \frac {k-x_j}{x_i-x_j}\)
正确性:
带入 \(x_i\) 则 \(y_i*\prod\limits_{j!=i}\frac {k-x_j}{x_i-x_j}=y_i*1\)
设 \(t~!=i\) 则 \(\prod\limits_{j!=t}\frac {k-x_j}{x_t-x_j}\) 中一定有 \(\frac{x_i-x_i}{x_t-x_i}=0\) 所以 \(\prod\limits_{j!=t}\frac {x_i-x_j}{x_t-x_j}=0\)
因此 当 \(k=x_i\) 时 \(\sum\limits_{i=0}^ny_i*\prod\limits_{j!=i} \frac {k-x_j}{x_i-x_j} = y_i\)
part 2
当 \(x_i\) 连续 则公式变为 \(\sum\limits_{i=0}^ny_i*\prod\limits_{j!=i} \frac {k-j}{i-j}\) , 我们可以将它优化到 \(O(n)\)
设 \(pre_i= \prod\limits_{j=0}^ik-j\) , \(suf_i= \prod\limits_{j=i}^nk-j,fac_i=i ~!\)
则 \(f(k)=\sum\limits_{i=0}^n y_i* \dfrac{pre_{i-1}*suf_{i+1}}{fac_i*fac_{n-i}*(-1^{n-i})}\)
将 \(fac_i*fac_{n-i}* -1^{n-i}\) 线性求逆元 即可做到 \(O(n)\)