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

一、引入

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

二、结论

下面直接给出结论:

f ( x ) = i = 0 n 1 y i j = 0 , j i n 1 x x j x i x j

复杂度 O ( n 2 )

三、证明

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

y k j = 0 , j k n 1 x k x j x k x j = y k

而对于 i k ,在满足 0 j < n , j i j 中一定有一个 j = k
于是就必定有一个 x k x k 的项。
所以对于 i k
y i j = 0 , j i n 1 x k x j x i x j = 0

得证。

四、应用

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

i = 1 n i k

n 10 18 , k 10 6
我们知道:
i = 1 n i 0 = n

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

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

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

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

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

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

猜你喜欢

转载自blog.csdn.net/xyz32768/article/details/81233900