拉格朗日插值2

拉格朗日插值2

拉格朗日插值法的优化

  • 拉格朗日插值法可以\(O(n^2)\)求出插值多项式。
  • 当然算法是有优化空间的,先来观察一下拉格朗日多项式。
    • \(F(x)=\sum_{i=0}^ny_i*\prod_{j\neq i}\frac{x-x_j}{x_i-x_j}\).
  • 当我们用到的\(x_i\)取值如果是连续的话,这样就就可以把算法的时间复杂度优化到\(O(n)\)
  • \(x_i\)换成\(i\),这样就是连续的了,新的式子为:\(F(k)=\sum_{i=0}^ny_i*\prod_{j\neq i}\frac{k-j}{i-j}\).
  • 首先维护分子来说,维护处前缀积和后缀积。
    • \(pre(i)=\prod_{j=1}^ik-j\).
    • \(suf(i)=\prod_{j=i}^nk-j\).
  • 对于分母来说,他是一个阶乘的形式,设\(fac(i)=i!\)
  • \(F(k)=\sum_{i=0}^ny_i*\prod_{j\neq i}\frac{pre(i-1)*suf(i+1)}{fac(i)*fac(n-i)}\).
    • 当然如果\(n-i\)为奇数的话,分母要取负号。

重心拉格朗日插值

  • \(F(k)=\sum_{i=0}^ny_i*\prod_{j\neq i}\frac{k-x_j}{x_i-x_j}\)
  • \(g=\prod_{i=0}^nk-x_i\).
  • \(F(k)=g\sum_{i=0}^n\prod_{j\neq i}\frac{y_i}{(k-x_i)(x_i-x_j)}\).
  • \(t_i=\frac{y_i}{\prod_{j\neq i}{x_i-x_j}}\).
  • \(F(x)=g\sum_{i=0}^n\frac{t_i}{k-x_i}\).
  • 这样复杂度就被优化到了\(O(n)\)

你可能感兴趣的:(拉格朗日插值2)