拉格朗日插值學習小結

簡介

在數值分析中,拉格朗日插值法是以法國18世紀數學家約瑟夫·拉格朗日命名的一種多項式插值方法。若是對實踐中的某個物理量進行觀測,在若干個不一樣的地方獲得相應的觀測值,拉格朗日插值法能夠找到一個多項式,其剛好在各個觀測的點取到觀測到的值。上面這樣的多項式就稱爲拉格朗日(插值)多項式。html

拉格朗日插值法

衆所周知,\(n + 1\)\(x\)座標不一樣的點能夠肯定惟一的最高爲\(n\)次的多項式。在算法競賽中,咱們經常會碰到一類題目,題目中直接或間接的給出了\(n+1\)個點,讓咱們求由這些點構成的多項式在某一位置的取值算法

一個最顯然的思路就是直接高斯消元求出多項式的係數,可是這樣作複雜度巨大\((n^3)\)且根據算法實現不一樣每每會存在精度問題學習

而拉格朗日插值法能夠在\(n^2\)的複雜度內完美解決上述問題優化

假設該多項式爲\(f(x)\), 第\(i\)個點的座標爲\((x_i, y_i)\),咱們須要找到該多項式在\(k\)點的取值spa

根據拉格朗日插值法.net

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

乍一看可能不是很好理解,咱們來舉個例子理解一下blog

假設給出的三個點爲\((1, 3)(2, 7)(3, 13)\)ip

直接把\(f(k)展開\)get

\(f(k) = 3 \frac{(k - 2)(k - 3)}{(1 - 2)(1 - 3)} + 7\frac{(k-1)(k-2)}{(2 - 1)(2-3)} + 13\frac{(k-1)(k-2)}{(3 -1)(3-2)}\)

觀察不可貴到,若是咱們把\(x_i\)帶入的話,除第\(i\)項外的每一項的分子中都會有\(x_i - x_i\),這樣其餘的全部項就都被消去了

所以拉格朗日插值法的正確性是能夠保證的

下面說一下拉格朗日插值法的拓展

\(x\)取值連續時的作法

在絕大多數題目中咱們須要用到的\(x_i\)的取值都是連續的,這樣的話咱們能夠把上面的算法優化到\(O(n)\)複雜度

首先把\(x_i\)換成\(i\),新的式子爲

\(f(k) = \sum_{i=0}^n y_i \prod_{i \not = j} \frac{k - j}{i - j}\)

考慮如何快速計算\(\prod_{i \not = j} \frac{k - j}{i - j}\)

對於分子來講,咱們維護出關於\(k\)的前綴積和後綴積,也就是

\[pre_i = \prod_{j = 0}^{i} k - j\]

\[suf_i = \prod_{j = i}^n k - j\]

對於分母來講,觀察發現這其實就是階乘的形式,咱們用\(fac[i]\)來表示\(i!\)

那麼式子就變成了

\[f(k) = \sum_{i=0}^n y_i \frac{pre_{i-1} * suf_{i+1}}{fac[i] * fac[N - i]}\]

注意:分母可能會出現符號問題,也就是說,當\(N - i\)爲奇數時,分母應該取負號

重心拉格朗日插值法

再來看一下前面的式子

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

\(g = \prod_{i=1}^n k - x[i]\)

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

\(t_i = \frac{y_i}{\prod_{j \not =i} x_i - x_j}\)

\[ f(k) = g\sum_{i = 0}^{n} \frac{t_i}{(k - x[i])} \]

這樣每次新加入一個點的時候只須要計算它的\(t_i\)便可

應用

經典應用

首先講一個經典應用:計算\(\sum_{i=1}^n i^k (n \leqslant 10^{15}, k \leqslant 10^6)\)

老祖宗告訴咱們,這個東西是個以\(n\)爲自變量的\(k + 1\)次多項式,具體證實能夠看第二份參考資料

而後直接帶入\(k+1\)個點後用拉格朗日插值算便可,複雜度\(O(k)\)

那具體在題目中怎麼使用拉格朗日插值呢?

首先你要證實求的東西是某個多項式,判斷的依據是:

大部分狀況下概括一下就能夠了

題目

由易到難排列

洛谷P4593 [TJOI2018]教科書般的褻瀆

BZOJ3453: tyvj 1858 XLkxc

BZOJ4559: [JLoi2016]成績比較

BZOJ2655: calc

參考資料

拉格朗日插值法

差分的應用及正整數的k次方冪求和

拉格朗日插值法及應用

拉格朗日插值 學習筆記

相關文章
相關標籤/搜索