拉格朗日插值學習筆記

2021-09-23 15:33:42 字數 1682 閱讀 3462

當給出了n個點的座標,求經過這 n 個點的多項式,以及某個點的點值,可以在 o(n^2) 的時間內求出,而樸素的高斯消元需要o(n^3)

給出我們對於每乙個 i,構造乙個多項式

發現,把 xi 帶進去時,函式值是 yi,  而將其他的x帶進去時,函式值都是0

於是我們把每個 i 的 li(x)相加,就是最後的多項式了

當要求 n 的函式值時,帶進去就可以 n^2 做了

ll lagrange(ll k)

}ans = add(ans, mul(y[i], mul(s1, power(s2, mod-2))));

} return ans;

}

如果x是連續的話,可以優化到o(n)

也就是求出 所有(n - xj) 的積,然後不要的那項求乙個逆元

分母是 (k-i)! *(i-1)!,要注意一下符號問題

ll lagrange(ll n, ll k) return ans;

}

經典應用首先講乙個經典應用:計算

老祖宗告訴我們,這個東西是個以n為自變數的k + 1次多項式

然後直接帶入k+1個點後用拉格朗日插值算即可,複雜度o(k)

也就是說,只要能判斷要求的是乙個多項式, 我們就可以用拉格朗日來插

最後放兩道道模板題 p4593 [tjoi2018]教科書般的褻瀆

這道題主要就是求

#include#define n 100

using namespace std;

const int mod = 1e9+7;

typedef long long ll;

ll a[n], f[n], fac[n]; int t;

ll add(ll a, ll b)

ll mul(ll a, ll b)

ll dec(ll a, ll b)

ll power(ll a, ll b) return ans;

}ll lagrange(ll n, ll k) return ans; }

int main() printf("%lld\n", (ans % mod + mod) % mod);

} return 0;

}

[tyvj1858] xlkxc

求首先 求

可以知道 f 是k+1項的多項式, g差分一下就是 f, 所以 g 是 k+2 項的多項式, f是k+3項的多項式

於是把 f的k+4項用 g 插出來, 然後暴力插 f的 第n項

#include#define n 200

using namespace std;

typedef long long ll;

const ll mod = 1234567891;

int t, k, a, n, d;

ll f[n], g[n], fac[n];

ll add(ll a, ll b)

ll mul(ll a, ll b)

ll power(ll a, ll b) return ans;

}ll lagrange(ll *a, ll k, ll n) return ans;

}int main() return 0;

}

筆記 拉格朗日插值

是個好東西。顯然 n 1 個點值可以唯一的確定乙個 n 次多項式。那麼根據多項式求點值的過程叫求值。根據多項式點值來求多項式其他點值就是插值了。那麼現在上拉格朗日插值。他解決的問題是 對於給定的 n 1 個點值求出其他點在這個 n 次多項式的值。我們嘗試構造多項式 f x 來滿足 n 1 個點值。我...

筆記 拉格朗日插值

例題 模板 拉格朗日插值 給你 n 個點 x i,y i 將過這 n 個點的最多 n 1 次的多項式記為 f x 求 f k 的值。設 f x displaystyle sum a x x i 將每個 x i 代入 f x 有 f x i y i 這樣就可以得到由 n 個 n 元一次方程所組成的方程...

拉格朗日插值的優缺點 筆記 拉格朗日插值

簡介 對於 k 次多項式函式 f x 若已知 k 1 個點值,則可構造出多項式。有 f x sum y i prod dfrac 正確性詳見 拉格朗日插值。正確性將 k 1 個點值代入即可檢驗。當 x x k 時,對 i 進行討論 當 i not 時,存在乙個 j 滿足 j k 對於乘積項的分子 p...