跳转至

插值

引入

插值是一种通过已知的、离散的数据点推算一定范围内的新数据点的方法。插值法常用于函数拟合中。

例如对数据点:

x 0 1 2 3 4 5 6
f(x) 0 0.8415 0.9093 0.1411 0.7568 0.9589 0.2794

其中 f(x) 未知,插值法可以通过按一定形式拟合 f(x) 的方式估算未知的数据点。

例如,我们可以用分段线性函数拟合 f(x)

这种插值方式叫做 线性插值

我们也可以用多项式拟合 f(x)

这种插值方式叫做 多项式插值

多项式插值的一般形式如下:

多项式插值

对已知的 n+1 的点 (x0,y0),(x1,y1),,(xn,yn),求 n 阶多项式 f(x) 满足

f(xi)=yi,i=0,1,,n

下面介绍多项式插值中的两种方式:Lagrange 插值法与 Newton 插值法。不难证明这两种方法得到的结果是相等的。

Lagrange 插值法

由于要求构造一个函数 f(x) 过点 P1(x1,y1),P2(x2,y2),,Pn(xn,yn). 首先设第 i 个点在 x 轴上的投影为 Pi(xi,0).

考虑构造 n 个函数 f1(x),f2(x),,fn(x),使得对于第 i 个函数 fi(x),其图像过 {Pj(xj,0),(ji)Pi(xi,yi),则可知题目所求的函数 f(x)=i=1nfi(x).

那么可以设 fi(x)=aji(xxj),将点 Pi(xi,yi) 代入可以知道 a=yiji(xixj),所以

fi(x)=yiji(xxj)ji(xixj)=yijixxjxixj

那么我们就可以得出 Lagrange 插值的形式为:

f(x)=i=1nyijixxjxixj

朴素实现的时间复杂度为 O(n2),可以优化到 O(nlog2n),参见 多项式快速插值

Luogu P4781【模板】拉格朗日插值

给出 n 个点对 (xi,yi)k,且 i,jijxixjf(xi)yi(mod998244353) 和 $\deg(f(x))