目录
拉格朗日插值
我们现在给定 \((n+1)\) 个点 \((x_i,y_i)\) ,请求解出一个不超过 \(n\) 次的多项式函数 \(P(x)\)
使得 \(\forall i\in[1,n+1]\bigcap Z,P(x_i)=y_i\)
对于这种问题,暴力设出 \(P(x)\) 的 \((n+1)\) 个系数,然后代入这些点,联立方程求解
这些需要用到克拉默法则或者高斯消元法求解,复杂度挺高的,为 \(O(n^3)\),我们思考有没有更优的方法:
假设 \(\displaystyle P_i(x)=(\prod_{j=1}^{i-1}(x-x_i)\ )\cdot(\prod_{j=i+1}^{n+1}(x-x_i)\ )\)
那么显然: \(\forall j\neq i,P(x_j)=0\)
假设 \(P(x_i)=b_i\) 则记 \(a_i={y_i\over b_i}\) 即 \(a_i={y_i\over P(x_i)}\)
因此 \(a_iP(x_i)=y_i\)
这样有什么好处呢?
很显然,所求一定可以写为 \(\displaystyle P(x)=\sum_{i=1}^{n+1}a_iP(x_i)\)
例如我们代入 \(x_j\)
则 \(\displaystyle P(x_j)=\sum_{i=1}^{n+1}a_iP(x_j)=\sum_{i\neq j}a_iP(x_j)+a_jP(x_j)=0+y_j=y_j\)
虽然看起来并没有更优,但如果我们所求的不是 \(P(x)\) 本身,而是 \(P(x)\) 在 \(x=k\) 处的取值时,速度会快上不少:
使用原方法,克拉默法则或是高斯消元法都是 \(O(n^3)\) 的,加上一次秦九韶算法 \(O(n)\) ,总复杂度 \(O(n^3)\)
而如果使用高斯消元法:
\(\displaystyle P(k)=\sum_{i=1}^{n+1}{y_i\over P_i(x_i)}P_i(k)\)