拉格朗日插值法小结

插值就是找一个多项式过几个已知的点。

使用待定系数法+高斯消元可以做到 O ( n 3 ) 。这显然不是最优解,不然标签就是高斯消元了= =

下面介绍拉格朗日插值法。
我们考虑一个多项式函数 f ( x ) ,其中 f ( x i ) = y i 。再考虑一个一个多项式 g ( x ) ,其中 g ( x i ) = z i 。他们的和函数 h ( x ) ,即这两个多项式的和,可以表示成 h ( x i ) = y i + z i

那么,举个例子,如果我们找到一个多项式 y = k 1 x + b 1 ( 1 , 3 ) ( 2 , 0 ) ,还有一个多项式 y = k 2 x + b 2 ( 1 , 0 ) ( 2 , 1 ) ,把这两个多项式加起来,就可以的到一个过 ( 1 , 3 ) ( 2 , 1 ) 的多项式。

假如我们要为n个点做一个n-1次多项式,设这n个点为 ( x i , y i ) ,这个多项式可以看做n个下面的函数的和。其中,第 i 个多项式函数 f i 除了在 f i ( x i ) = y i 外,其他的位置取值都为0,即 f i ( x j ) = 0 ( i j )

大家应该学过二次函数的零点式,即

f ( x ) = a ( x x 1 ) ( x x 2 )

显然在 f ( x ) = 0 时,必有 x 1 , x 2 两解。推而广之,一个有n个顶点的n次多项式可以写为,
f ( x ) = a ( x x 1 ) ( x x 2 ) ( x x n )

那么插值用的第i个多项式可写作为

f i ( x ) = a i j ( x x j )

又有 f i ( x i ) = y i ,带入 x i ,可得

a = y i i j ( x i x j )

所以

f i ( x ) = y i i j ( x x j ) i j ( x i x j )

所以,插值总式为,

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

也可以写作,

f ( x ) = i = 1 n a i j ( x x j )

显然这时候预处理 a O ( n 2 ) ,求一次值也要 O ( n 2 )

如果我们先预处理出 D = i = 1 n ( x x i ) D x x i = i j ( x x j ) ,就可以 O ( n ) 求值。

假如 x i 为等差数列,那么也可以通过预处理阶乘跑出 i j ( x i x j ) ,从而做到 O ( n ) 插值, O ( n ) 求值。

也就是告诉我们,当 x i 可以由我们定的时候,显然要按顺序算啦。

猜你喜欢

转载自blog.csdn.net/liangzihao1/article/details/81022723
今日推荐