多项式——多项式牛顿迭代
多项式的牛顿迭代法是多项式函数的基础算法。考虑方程 F ( P ( x ) ) ≡ 0 m o d x n F(P(x)) \equiv 0 \mod x^n F(P(x))≡0modxn 其中 F ( x ) F(x) F(x) 是一个已知的多项式插值函数(其实是可以泰勒展开的任意函数)定义为:
F ( x ) = ∑ i = 0 ∞ α i ( x − β ) i F(x) = \sum_{i=0}^{\infty} \alpha_i (x - \beta)^i F(x)=i=0∑∞αi(x−β)i
α i \alpha_i αi 称为系数, β \beta β 称为展开点,都是定值。
P ( x ) P(x) P(x) 是一个多形式,现在请求出 P ( x ) P(x) P(x) 。
将 F ( x ) F(x) F(x) 在 y y y 点泰勒展开得到:
F ( x ) = F ( y ) + ( x − y ) F ′ ( y ) + ( x − y ) 2 G ( x , y ) F(x) = F(y) +(x - y)F'(y) + (x-y)^2G(x,y) F(x)=F(y)+(x−y)F′(y)+(x−y)2G(x,y)
其中 F ′ ( x ) F'(x) F′(x) 是 F ( x ) F(x) F(x) 的导数,定义为:
F ′ ( x ) = ∑ i = 0 ∞ ( i + 1 ) α i + 1 ( x − β ) i F'(x) = \sum_{i=0}^{\infty} (i+1) \alpha_{i+1} (x - \beta)^i F′(x)=i=0∑∞(i+1)αi+1(x−β)i
而 G ( x , y ) G(x,y) G(x,y) 是关于 x x x 和 y y y 的形式幂级数。
令 F ( Q k ) ≡ 0 m o d x a F(Q_k) \equiv 0 \mod x^a F(Qk)≡0modxa 我们想找到 F ( Q k + 1 ) ≡ 0 m o d x 2 a F(Q_{k+1}) \equiv 0 \mod x^{2a} F(Qk+1)≡0modx2a 满足 Q k + 1 ≡ Q k + x a C m o d x 2 a Q_{k+1} \equiv Q_k + x^aC \mod x^{2a} Qk+1≡Qk+xaCmodx2a 。
带入 x = Q k + 1 x = Q_{k+1} x=Qk+1 和 y = Q k y = Q_k y=Qk 我们得到:
F ( Q k + 1 ) ≡ F ( Q k ) + ( Q k + 1 − Q k ) F ′ ( Q k ) + ( Q k + 1 − Q k ) 2 G ( x , y ) m o d x 2 a . F(Q_{k+1}) \equiv F(Q_k) + (Q_{k+1} - Q_k) F'(Q_k) + (Q_{k+1} - Q_k)^2 G(x, y) \mod x^{2a}. F(Qk+1)≡F(Qk)+(Qk+1−Qk)F′(Qk)+(Qk+1−Qk)2G(x,y)modx2a.
因为 Q k + 1 − Q k ≡ 0 m o d x a Q_{k+1} - Q_k \equiv 0 \mod x^a Qk+1−Qk≡0modxa 那么 ( Q k + 1 − Q k ) 2 ≡ 0 m o d x 2 a (Q_{k+1} - Q_k)^2 \equiv 0 \mod x^{2a} (Qk+1−Qk)2≡0modx2a 。因此:
0 ≡ F ( Q k + 1 ) ≡ F ( Q k ) + ( Q k + 1 − Q k ) F ′ ( Q k ) m o d x 2 a 0 \equiv F(Q_{k+1}) \equiv F(Q_k) + (Q_{k+1} - Q_k) F'(Q_k) \mod{x^{2a}} 0≡F(Qk+1)≡F(Qk)+(Qk+1−Qk)F′(Qk)modx2a
等式的第三部分告诉了我们 Q k Q_k Qk 和 Q k + 1 Q_{k+1} Qk+1 的关系,即为:
Q k + 1 ≡ Q k − F ( Q k ) F ′ ( Q k ) m o d x 2 a Q_{k+1} \equiv Q_k - \frac{F(Q_k)}{F'(Q_k)} \mod{x^{2a}} Qk+1≡Qk−F′(Qk)F(Qk)modx2a
你已经学会如何对多项式取逆和如何计算 F ( Q k ) F(Q_k) F(Qk) 了,那么我们就能在 O ( n log n ) O(n \log n) O(nlogn) 的情况下计算出多项式 P ( x ) P(x) P(x) 。
上述过程就称为多项式的牛顿迭代法,可用于计算多项式函数。