拉格朗日插值的應用

2022-08-30 10:24:11 字數 1534 閱讀 6914

什麼是拉格朗日插值?假設我們現在有三個點 \((x_1,y_1),(x_2,y_2),(x_3,y_3)\),現在我們要找一條唯一的二次曲線剛好經過這三個點。

拉格朗日給出了乙個絕妙的方法,他把我們要求的曲線的表示式等同於三個函式的累加。具體是這麼操作的:

第乙個函式保證\(f_1(x_1)=1,f_1(x_2)=f_1(x_3)=0\)

第二個函式保證\(f_2(x_2)=1,f_2(x_1)=f_2(x_3)=0\)

第三個函式保證\(f_3(x_3)=1,f_3(x_1)=f_3(x_2)=0\)

那麼我們所要求的函式即為:

$f(x)=y1f_(x)+y2f_(x)+y3f_(x)$

可以保證的是這個函式同時經過\((x_1,y_1),(x_2,y_2),(x_3,y_3)\)並且是唯一的滿足條件的二次函式。

如果上面的部分你看懂了,那麼你已經掌握了拉格朗日插值的用法和思想。接下來我們要做的就是尋找乙個公式使得利用現在已有的\(n\)個點,來推導出\(n-1\)次的函式。

那麼這個函式為:

$f(x)=\sum_^ny_i\prod_^n\frac$ 一般情況下拉格朗日插值的複雜度是\(o(n^2)\),即:

#includeusing namespace std;

const int n = 1e6+100;

typedef long long ll;

const ll mod = 998244353;

struct pointp[n];

int n,k;

ll qpow(ll a,ll b,ll mod)

a=(a%mod*a%mod)%mod;

b>>=1;

} return ans%mod;

}ll lagrange(int k)

ans=(ans%mod+(p[j].y%mod*base1%mod*qpow(base2,mod-2,mod)%mod)%mod)%mod;

} return ans;

} int main()

return (ans%mod+mod)%mod;

}//拉格朗日插值,n項,每個點的座標為(x_i,y_i),求第xi項的值,保證x是連續的一段

ll lagrange(ll n, ll *x, ll *y, ll xi)

int main(){

ll n,k;

cin>>n>>k;

if(k==0){

cout其實拉格朗日插值在演算法競賽中主要用於資料分析,即對於給定的某些關係構造出若干已知點,然後利用這些已知點去計算通項公式。

拉格朗日插值

拉格朗日插值基函式 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...

拉格朗日插值

存在性和唯一性的證明以後再補。拉格朗日插值,emmmm,名字挺高階的 joy 它有什麼應用呢?我們在fft中講到過 設 n 1 次多項式為 y sum a i x i 有乙個顯然的結論 如果給定 n 個互不相同的點 x,y 則該 n 1 次多項式被唯一確定 那麼如果給定了這互不相同的 n 個點,利用...