多项式——多项式牛顿迭代
多项式的牛顿迭代法是多项式函数的基础算法。考虑方程 F(P(x))≡0mod xnF(P(x)) \equiv 0 \mod x^nF(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) 在 yyy 点泰勒展开得到:
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(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) 是关于 xxx 和 yyy 的形式幂级数。
令 F(Qk)≡0mod xaF(Q_k) \equiv 0 \mod x^aF(Qk)≡0modxa 我们想找到 F(Qk+1)≡0mod x2aF(Q_{k+1}) \equiv 0 \mod x^{2a}F(Qk+1)≡0modx2a 满足 Qk+1≡Qk+xaCmod x2aQ_{k+1} \equiv Q_k + x^aC \mod x^{2a}Qk+1≡Qk+xaCmodx2a 。
带入 x=Qk+1x = Q_{k+1}x=Qk+1 和 y=Qky = Q_ky=Qk 我们得到:
F(Qk+1)≡F(Qk)+(Qk+1−Qk)F′(Qk)+(Qk+1−Qk)2G(x,y)mod x2a. 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.
因为 Qk+1−Qk≡0mod xaQ_{k+1} - Q_k \equiv 0 \mod x^aQk+1−Qk≡0modxa 那么 (Qk+1−Qk)2≡0mod x2a(Q_{k+1} - Q_k)^2 \equiv 0 \mod x^{2a}(Qk+1−Qk)2≡0modx2a 。因此:
0≡F(Qk+1)≡F(Qk)+(Qk+1−Qk)F′(Qk)mod x2a 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
等式的第三部分告诉了我们 QkQ_kQk 和 Qk+1Q_{k+1}Qk+1 的关系,即为:
Qk+1≡Qk−F(Qk)F′(Qk)mod x2a 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(Qk)F(Q_k)F(Qk) 了,那么我们就能在 O(nlogn)O(n \log n)O(nlogn) 的情况下计算出多项式 P(x)P(x)P(x) 。
上述过程就称为多项式的牛顿迭代法,可用于计算多项式函数。