[学习笔记]拉格朗日插值法求多项式系数

一、引入

我们会遇到这样的问题:
给定 n n 个点 (xi,yi) ( x i , y i ) ,求一个 n1 n − 1 次多项式函数 f(x) f ( x )
使对于每个 i i ,都有 f(xi)=yi f ( x i ) = y i
其中 xi x i 互不相同。
利用线性代数的知识可以得出有且仅有一个 f(x) f ( x ) 满足条件。

二、结论

下面直接给出结论:

f(x)=i=0n1yij=0,jin1xxjxixj f ( x ) = ∑ i = 0 n − 1 y i ∏ j = 0 , j ≠ i n − 1 x − x j x i − x j

复杂度 O(n2) O ( n 2 )

三、证明

对于任意 0k<n 0 ≤ k < n ,将 xk x k 代入公式:
对于 i=k i = k ,有 xi=xk x i = x k

ykj=0,jkn1xkxjxkxj=yk y k ∏ j = 0 , j ≠ k n − 1 x k − x j x k − x j = y k

而对于 ik i ≠ k ,在满足 0j<n,ji 0 ≤ j < n , j ≠ i j j 中一定有一个 j=k j = k
于是就必定有一个 xkxk x k − x k 的项。
所以对于 ik i ≠ k
yij=0,jin1xkxjxixj=0 y i ∏ j = 0 , j ≠ i n − 1 x k − x j x i − x j = 0

得证。

四、应用

如果知道了两个变量之间的联系是多项式并知道了多项式的次数 n1 n − 1 ,那么可以取 n n 个值(要取合适的值)代入多项式并求解。
如:
给定 n,k n , k ,求:

i=1nik ∑ i = 1 n i k

n1018,k106 n ≤ 10 18 , k ≤ 10 6
我们知道:
i=1ni0=n ∑ i = 1 n i 0 = n

i=1ni1=n(n+1)2 ∑ i = 1 n i 1 = n ( n + 1 ) 2

i=1ni2=n(n+1)(2n+1)6 ∑ i = 1 n i 2 = n ( n + 1 ) ( 2 n + 1 ) 6

i=1ni3=(n(n+1)2)2 ∑ i = 1 n i 3 = ( n ( n + 1 ) 2 ) 2

得出结论: f(n,k)=ni=1ik f ( n , k ) = ∑ i = 1 n i k 是一个 k+1 k + 1 次多项式。
可以取 k+2 k + 2 个值 1,2,...,k+2 1 , 2 , . . . , k + 2 并计算出 f(1,k),f(2,k),...,f(k+2,k) f ( 1 , k ) , f ( 2 , k ) , . . . , f ( k + 2 , k ) 代入:
f(n,k)=i=1k+2f(i,k)j=1,jik+2njij f ( n , k ) = ∑ i = 1 k + 2 f ( i , k ) ∏ j = 1 , j ≠ i k + 2 n − j i − j

可以 O(k) O ( k ) 预处理出 g(i)=k+2j=1,ji{nj} g ( i ) = ∏ j = 1 , j ≠ i k + 2 { n − j } 。对 j<i j < i j>i j > i 分别处理即可。
而对 k+2j=1,ji{ij} ∏ j = 1 , j ≠ i k + 2 { i − j } ,也可以分 j<i j < i j>i j > i 分别处理:
j=1,jik+2{ij}=(1)k+2i(i1)!(k+2i)! ∏ j = 1 , j ≠ i k + 2 { i − j } = ( − 1 ) k + 2 − i ( i − 1 ) ! ( k + 2 − i ) !

预处理阶乘后,复杂度就是 O(k) O ( k ) 的。然而由于求 f(i,k) f ( i , k ) 时要求幂,复杂度 O(klogk) O ( k log ⁡ k )

你可能感兴趣的:(学习笔记)