「学习笔记」 拉格朗日插值入门

Description

给定 \(n\) 个点,确定一个多项式,并计算该多项式在另一个点的值

\(luogu\) 的模板题)

Solution

直接给公式

\[f_x=\sum_{i=0}^n y_i\times(\prod_{j\neq i} \frac{x-x_j}{x_i-x_j}) \]

原理:我们带进去一个 \(x=x_i\)

发现除了 \(i=i\) 那一项之外的所有项中分子必为 \(0\)

然后这样做是个 \(O(n^2)\)


连续的点值我们可以将它优化到 \(O(n)\)

比如下面的例子

\[\sum_{i=1}^n i^k \]

伯努利数或者差分可以证明是一个 \(k+1\) 次的多项式

一般在求这东西的时候就是要插值

当然,如果 \(n\le k+2\) 可以暴力做,因为这种题理论上 \(k\) 是比较小的

令我们取的是 \(1\to (k+2)\) 的点值

\(f_x=\sum\limits_{i=1}^x i^k\)

则有(其实这步我个人并没有掌握,坑待填)

\[f_x=\sum _ {i=1} ^{k+2} i^k=a_x\times\prod_{x \ne i} (x-i) \]

然后推对答案的贡献就有

\[f_n=\sum_{i=1}^n x^k=\sum_{i=1}^{k+2} \sum_{q=1}^i q^k \prod_{j\neq i} \frac{n-j}{i-j} \]

直接考虑分子分母,分母本质上面是两个阶乘的乘积,分子是一个前缀积乘上一个后缀积(把 \(i\) 隔过去了)

这样就可以 \(O(k)\) 做了

模板题

不那么板子的板子题

当然……这题本来是给斯特林数做的……

感觉理解的还不太行,不太能明白这个式子是怎么用的

到时候问问留坑吧


重心拉格朗日插值

看懂式子了……但是好像并不知道怎么用……

还是上原来的式子

\[f_n=\sum_{i=1}^n y_i\prod_{j\ne i} \frac{n-x_j}{x_i-x_j} \]

\(g=\prod\limits_{i=0}^n n-x_i\)

那么

\[f_n=\sum_{i=1}^n g\prod_{j\ne i} \frac{y_i}{(k-x_i)(x_i-x_j)} \]

再令\(t_i=\frac{y_i}{\prod\limits_{j \ne i} x_i-x_j}\)

那么

\[f_n=g\sum_{i=0} ^n \frac {t_i}{k-x_i} \]

然后我们新加入点值的时候需要计算一下它的 \(t_i\) 并且更新 \(g\)就行了……

不会打,不知道怎么用.jpg


学了这么多,最后看看那个不太板子的板子题

审题是个关键点

推推式子就能做完了(具体这个贡献法是怎么来的……留坑吧)

啊这个\(k\) 显然等于 \(m+1\)

然后这个题可以做拉格朗日插值

结论:自然数 \(k\) 次幂和是一个\(k+1\) 次的多项式

上个板子就没了

猜你喜欢

转载自www.cnblogs.com/yspm/p/13394911.html