由小學知識可知n個點\((x_i,y_i)\)可以唯一地確定乙個多項式\(y=f(x)\)。
那麼問題來了,既然這是小學的知識,那麼為什麼我這個初一的蒟蒻看到這玩意還是一臉懵呢
引入正題:我們改怎麼求出這個多項式呢?
當然是用拉格朗日插值來求解啊,不然這題怎麼叫「拉格朗日插值」的模板呢 滑稽滑稽
那麼插值又是什麼東東呢?
簡單來講,就是:
在離散資料的基礎上補插連續函式,
使得這條連續曲線通過全部給定的離散資料點。
插值是離散函式逼近的重要方法,
利用它可通過函式在有限個點處的取值狀況,
估算出函式在其他點處的近似值。
插值就是用來填充影象變換時畫素之間的空隙。
好吧我也不懂
本蒟蒻只會拉格朗日插值,其他的一竅不通……
那麼就先來講拉格朗日插值法:
在數值分析中,
拉格朗日插值法是以法國十八世紀數學家約瑟夫·拉格朗日命名的一種多項式插值方法。
許多實際問題中都用函式來表示某種內在聯絡或規律,
而不少函式都只能通過實驗和觀測來了解。
如對實踐中的某個物理量進行觀測,
在若干個不同的地方得到相應的觀測值,
拉格朗日插值法可以找到乙個多項式,
其恰好在各個觀測的點取到觀測到的值。
這樣的多項式稱為拉格朗日(插值)多項式。
數學上來說,
拉格朗日插值法可以給出乙個恰好穿過二維平面上若干個已知點的多項式函式。
然後是拉格朗日插值的歷史(歷史也是很重要滴):
拉格朗日插值法最早被英國數學家愛德華·華林於2023年發現。
不久後(2023年)由萊昂哈德·尤拉再次發現。
2023年,拉格朗日在其著作《師範學校數學基礎教程》中發表了這個插值方法,從此他的名字就和這個方法聯絡在一起。
所以各位小夥伴記住啦,拉格朗日插值並不是拉格朗日發明的哦
瞎扯完了,我們來寫程式。
寫程式之前,先來搞搞公式。
\[f(k)=\sum\limits_^n(y_i \prod\limits_^n\dfrac)
\]很好,有了公式我們就可以瞎搞了哈哈哈
那麼問題來了,怎麼求那個奇奇怪怪的\(\prod\limits_^n\frac\)呢?
如果您直接打暴力而且a掉的話,那麼請收下我的膝蓋,因為我這麼幹從來就沒a過。
ps:上次我有個同學用\(o(2^n)\)的演算法+剪枝過了\(n=50\)的資料,這就是oier們的優良傳統
經過一番思維掙扎後,我想到了乘法逆元。
如果您不知道乘法逆元是個什麼東西,請自行查詢這裡
然後這個除法就愉快地變成了乘法
下面給出模擬的程式:
#include using namespace std;
const long long mo=998244353;
long long fast_power(long long n,long long m,long long p)
//我不知道這個fast_power英語語法上對不對,好多大佬都是寫成quick_pow的,照理來說兩個都是adj.,應該都沒問題
return r;
}//快速冪
long long x[10000],y[10000],n,k,ans=0;
int main()
ans+=s1*fast_power(s2,mo-2,mo)%mo;
/*乘法逆元的用場,
fast_power(s2,mo-2,mo)是s2在mod mo意義下的乘法逆元,
這裡比較實用的是快速冪,
但是在乘法逆元的板子題那裡,
快速冪會一敗t地
*/ ans=(ans+mo)%mo;
} cout《到此這道題就ac了,qaq
模板 拉格朗日插值法
update 其實拉格朗日插值法的問題在於求分母的複雜度是 o n 2 的,要是還要求逆元則再多乙個 logp 變成 o n 2logp 但是當乙個多項式要重複使用的時候,也不必求出他的各個係數,只要預處理出各項分母的逆元之後,o nlogp 處理分子 求出字首積和字尾積 然後再插值,漸進複雜度和求...
拉格朗日插值
拉格朗日插值基函式 li x x x 0 x xi 1 x xi 1 x x n x i x0 xi xi 1 xi xi 1 xi xn 拉格朗日差值函式 ln x i 0 nyil i x 其中,x為缺失值對應的下表序號,ln x 為缺失值的插值結果,xi 為缺失值yi 的下表序號。對全部缺失值...
拉格朗日插值
function s larg1 x,y,xi m length x 求出插值節點向量長度 n length y if m n error 向量x與y的長度必須一致 這裡肯定一致,只是為了消除直接選取x,y資料的時候出錯而設定的 end s 0 for i 1 n z ones 1,length x...