插值
告诉你一个函数会经过 \(n\) 个点(\(n\)个点各不相同),然后让你计算其余几个位置的取值。(应该吧,个人理解)
一般情况下可能会用在一些数据统计中函数的拟合。(不然为什么会有这么多乱七八糟的拟合啊QAQ)
当然,这里主要涉及的是多项式插值,即利用经过这\(n\)个点的最高次项次数小于\(n\)的关于\(x\)的那个多项式,通过代入或者其他方法求出这几个位置的取值。
当然,这里给出一道模板题,在拉格朗日插值和牛顿插值时就是用这个模板题的。
当然,这种题目暴力用高斯消元也是能做的,可惜A不了,毕竟时间复杂度时\(O(n^3)\)
下文都认为给出的是\(n+1\)个点,点的标号从\(0\)开始,同时设第\(k\)个点为\((x_{k},y_{k})\)。
拉格朗日插值法
普通拉格朗日插值法
观察模板题和高斯消元,你会发现我们把这个多项式解出来真的太浪费啦。
有没有不用求出多项式也能求值的方法呢?
有!
拉格朗日发表了这么一个方法:
\(L(x)=\sum\limits_{i=0}^nℓ_{i}(x)y_{i}\)
其中\(ℓ_{i}(x)\)叫 拉格朗日基本多项式 ,\(L(n)\)叫 拉格朗日插值多项式 。
\(ℓ_{i}(x)=\prod\limits_{j=0,j≠i}^n\frac{(x-x_{j})}{(x_{i}-x_{j})}\)
这个多项式有个非常NB的性质(其实也非常显然)
就是\(ℓ_{i}(x)\)在\(x_{j}(j≠i)\)处为\(0\),在\(x_{i}\)处为\(1\)。
那么显然,\(L(x)\)经过这\(n\)个点。
这样,我们就只需要把\(k\)代入,就可以在\(O(n^2)\)的时间内求解了。
显然,我们节省的是求出这个多项式的时间。
当然,可以证明的是,这个拉格朗日插值多项式是唯一一个次数≤\(n\)的经过这\(n+1\)个点的多项式。
唯一性
假设存在两个\(n\)次多项式,都经过这\(n+1\)个点,假设这两个多项式为\(P_1,P_2\)
\(P_3=P_2-P_1\)
那么\(P_3\)显然\(≠0\)。
而且因为都经过\(n+1\)个点,所以有\(n+1\)个根,所以\(P_3\)的次数为\(n\)。
而且可以写成
那么\(P_{3}\)可以写成\(k\prod\limits_{i=0}^n(x-x_i)\)
但是这样次数是\(n+1\)的,显然不对,矛盾,证毕。
所以最多存在这样唯一一个多项式。
存在性
首先,不一定存在次数为 \(n\) 的多项式,举个例子:
\((1,1),(2,2),(3,3)\)就不能被一个二次方程经过。
当然,能经过这\(n+1\)个点的也不一定要是个次数大于\(0\)的多项式,比如你给\(n+1\)个\(y\)值相等的点,怎么可能存在一个\(n\)次多项式能够经过\(n+1\)个\(y\)值相同的点啊(因为这和一个多项式能有\(n+1\)个点的命题是等价的,这个命题先让错误,不然可以写成\((x-x_{i})\)的形式,证明这个形式次数大于\(n\))。
所以下面假定至少存在两个点 \(y\) 值不同。
在这个条件下,我们可以证明\(L(x)\)是一个次数大于\(0\)的多项式。
我们假设存在一组\(a_0,a_1,a_2,...a_{n+1}\)系数,使得:
\(P(x)=\sum\limits_{i=0}^na_{i}ℓ(i)=a_{n+1}\)
首先,因为\(ℓ_{i}(x)\)函数只有在\(x_{i}\)处为\(1\),其余\(x_{j}\)处都是为\(0\)的,所以显然\(P(x_{i})=a_{i}\),但是呢,这个函数的值又是恒定的,所以\(a_{0}=a_{1}=a_{2}=....=a_{n+1}\)。
又因为\(y_{i}\)并不相同,所以证毕。
代码
当然,这道题目我还是有