拉格朗日插值 学习笔记
拉格朗日插值 学习笔记
前言
模拟赛考了,我不会,故学之。
真的好抽象……
背景
众所周知,用 \(n\) 个点可以确定一个 \(n-1\) 次的多项式,那么应该如何确定呢?
我们不妨考虑这样一个题目(其实就是洛谷模板题):给定 \(n\) 个点 \((x, y)\),要求确定 \(f(x)\)。当然,直接求出系数可能比较困难,所以这里求出 \(f(k)\) 的值即可。模 \(998244353\)。
正文
下文均忽略了模数,因为取模与否无关紧要。
方法一:高斯消元
直接把每个 \(x_i\) 代入,这样就得到了 \(n\) 个方程。直接解出各个系数即可。复杂度 \(O(n^3)\)。
方法二:拉格朗日插值
这里利用了构造的思想。
我们要构造 \(n\) 个函数 \(g(x)\),满足:
也就是说,函数 \(g_i(x)\) 的图像在横坐标等于 \(x_j( j \not= i)\) 的时候过的是点 \((x_j, 0)\),在 \(x_i\) 处过点 \((x_i, y_i)\)。
很显然,\(f(x) = \sum_{i = 1}^{n} g_i(x)\)。
那么对于 \(g_i(x)\) 的构造,可以这样考虑,直接设 \(g_i(x) = a \cdot \prod_{j \not= i}^{n} (x - x_j)\),然后代入 \((x_i, y_i)\) 得 \(a = \frac{y_i}{ \prod_{j \not= i}^{n} (x_i - x_j) }\)
因此,\(f(x) = \sum_{i = 1}^{n} y_i \prod_{j \not= i}^{n} \frac{x - x_j}{x_i - x_j}\)。
这样,就可以 \(O(n^2)\) 地求出 \(f(k)\) 了。
当然,这个表达式还有另一种推法,用了类似中国剩余定理的思路来构造。可惜我对多项式的除法和取余什么的不是很熟悉,就不在这里说了。
对于 \(x\) 连续的插值
上面的算法是 \(O(n^2)\) 的,所以如果 \(n\) 很大就没办法了。但如果我们可以快速得到 \(x \in [1, n+1]\) 的值,则可以 \(O(n)\) 求出 \(f(k)\) 的值。
我们代入原表达式,可得
上面的部分可以看作 \(\frac{\prod_{j=1}^{n} (x - j)}{x-i}\),下面的部分就拆成两部分阶乘即可。