拉格朗日插值 学习笔记

拉格朗日插值 学习笔记

前言

模拟赛考了,我不会,故学之。

真的好抽象……

背景

众所周知,用 \(n\) 个点可以确定一个 \(n-1\) 次的多项式,那么应该如何确定呢?

我们不妨考虑这样一个题目(其实就是洛谷模板题):给定 \(n\) 个点 \((x, y)\),要求确定 \(f(x)\)。当然,直接求出系数可能比较困难,所以这里求出 \(f(k)\) 的值即可。模 \(998244353\)

正文

下文均忽略了模数,因为取模与否无关紧要。

方法一:高斯消元

直接把每个 \(x_i\) 代入,这样就得到了 \(n\) 个方程。直接解出各个系数即可。复杂度 \(O(n^3)\)

方法二:拉格朗日插值

这里利用了构造的思想。

我们要构造 \(n\) 个函数 \(g(x)\),满足:

\[g_i(x) = \left\{ \begin{aligned} &y_i(x = x_i) \\ &0(x \in {x_i}, x \not= x_i) \end{aligned} \right. \]

也就是说,函数 \(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)\) 的值。

我们代入原表达式,可得

\[f(x) = \sum_{i = 1}^{n} y_i \prod_{j \not= i}^{n} \frac{x - j}{i - j} \]

上面的部分可以看作 \(\frac{\prod_{j=1}^{n} (x - j)}{x-i}\),下面的部分就拆成两部分阶乘即可。

posted @ 2023-09-23 10:57  霜木_Atomic  阅读(17)  评论(0编辑  收藏  举报