牛顿迭代法

牛顿迭代法

定义

在一般意义下,牛顿迭代法可以求出一个函数的零点,而在多项式意义下,牛顿迭代能够求出:给定一个 G ( x ) G(x) G(x),求 F ( x ) F(x) F(x),使得 G ( F ( x ) ) ≡ 0        ( m o d      x n ) G(F(x)) \equiv 0\;\;\;(mod\;\;x^n) G(F(x))0(modxn)

推导

n = 1 n=1 n=1时,单独求解 F ( x ) F(x) F(x)的值。
n > 1 n>1 n>1时,假设我们已经求出了 F 0 ( x ) F_0(x) F0(x)满足 G ( F 0 ( x ) ) = 0        ( m o d      x ⌈ n 2 ⌉ ) G(F_0(x))=0\;\;\;(mod\;\;x^{\lceil \frac{n}{2} \rceil}) G(F0(x))=0(modx2n)

考虑如何用 F 0 ( x ) F_0(x) F0(x)求出 F ( x ) F(x) F(x)
G ( F ( x ) ) G(F(x)) G(F(x)) F 0 ( x ) F_0(x) F0(x)处泰勒展开。
G ( F ( x ) ) = G ( F 0 ( x ) ) + G ( F 0 ′ ( x ) ) 1 ! ( F ( x ) − F 0 ( x ) ) + G ( F 0 ′ ′ ( x ) ) 2 ! ( F ( x ) − F 0 ( x ) ) … … G(F(x))=G(F_0(x))+\frac{G(F_0'(x))}{1!}(F(x)-F_0(x))+\frac{G(F_0''(x))}{2!}(F(x)-F_0(x))…… G(F(x))=G(F0(x))+1!G(F0(x))(F(x)F0(x))+2!G(F0(x))(F(x)F0(x))
可以发现 F ( x ) − F 0 ( x ) F(x)-F_0(x) F(x)F0(x)的非零项大于 ⌈ n 2 ⌉ \lceil \frac{n}{2} \rceil 2n,因此有 ( F ( x ) − F 0 ( x ) ) 2 (F(x)-F_0(x))^2 (F(x)F0(x))2的非零项大于 n n n,所以有:
G ( F ( x ) ) = G ( F 0 ( x ) ) + G ( F 0 ′ ( x ) ) ( F ( x ) − F 0 ( x ) )        ( m o d      x n ) G(F(x))=G(F_0(x))+G(F'_0(x))(F(x)-F_0(x))\;\;\;(mod\;\;x^n) G(F(x))=G(F0(x))+G(F0(x))(F(x)F0(x))(modxn)

因为 G ( F ( x ) ) ≡ 0        ( m o d      x n ) G(F(x)) \equiv 0\;\;\;(mod\;\;x^n) G(F(x))0(modxn),所以:
F ( x ) = F 0 ( x ) − G ( F 0 ( x ) ) G ( F 0 ′ ( x ) ) F(x)=F_0(x)-\frac{G(F_0(x))}{G(F_0'(x))} F(x)=F0(x)G(F0(x))G(F0(x))

应用

多项式求逆:

已知多项式 A ( x ) A(x) A(x),求一个多项式 F ( x ) F(x) F(x),使得 F ( x ) A ( x ) ≡ 1        ( m o d      x n ) F(x)A(x)\equiv 1\;\;\;(mod\;\;x^n) F(x)A(x)1(modxn)
相当于求 F ( x ) F(x) F(x)满足 A ( x ) − 1 F ( x ) ≡ 0        ( m o d      x n ) A(x)-\frac{1}{F(x)}\equiv 0\;\;\;(mod\;\;x^n) A(x)F(x)10(modxn)

G ( x ) = A ( x ) − 1 F 0 ( x ) G(x)=A(x)-\frac{1}{F_0(x)} G(x)=A(x)F0(x)1
则根据牛顿迭代,有:
F ( x ) = F 0 ( x ) − A ( x ) − 1 F 0 ( x ) F 0 ( x ) − 2        ( m o d      x n ) F(x)=F_0(x)-\frac{A(x)-\frac{1}{F_0(x)}}{F_0(x)^{-2}}\;\;\;(mod\;\;x^n) F(x)=F0(x)F0(x)2A(x)F0(x)1(modxn)
因此有:
F ( x ) = F 0 ( x ) ( 2 − F 0 ( x ) A ( x ) )        ( m o d      x n ) F(x)=F_0(x)(2-F_0(x)A(x))\;\;\;(mod\;\;x^n) F(x)=F0(x)(2F0(x)A(x))(modxn)
因此递归求解 F 0 ( x ) F_0(x) F0(x)即可,感觉比倍增法的推导精妙一些(虽然求逆的倍增法和牛顿迭代的推法差不多)。

多项式开方:

已知多项式 A ( x ) A(x) A(x),求一个多项式 F ( x ) F(x) F(x),使得 F ( x ) 2 ≡ A ( x )        ( m o d      x n ) F(x)^2\equiv A(x)\;\;\;(mod\;\;x^n) F(x)2A(x)(modxn)

相当于求 F ( x ) F(x) F(x)满足 F ( x ) 2 − A ( x ) ≡ 0        ( m o d      x n ) F(x)^2-A(x)\equiv 0\;\;\;(mod\;\;x^n) F(x)2A(x)0(modxn)

G ( x ) = F 0 ( x ) 2 − A ( x ) G(x)=F_0(x)^2-A(x) G(x)=F0(x)2A(x)
F ( x ) = F 0 ( x ) − F 0 ( x ) 2 − A ( x ) 2 F 0 ( x ) F(x)=F_0(x)-\frac{F_0(x)^2-A(x)}{2F_0(x)} F(x)=F0(x)2F0(x)F0(x)2A(x)
因此:
F ( x ) = F 0 ( x ) + A ( x ) 2 F 0 ( x )        ( m o d      x n ) F(x)=\frac{F_0(x)+A(x)}{2F_0(x)}\;\;\;(mod\;\;x^n) F(x)=2F0(x)F0(x)+A(x)(modxn)
时间复杂度 O ( n l g n ) O(nlgn) O(nlgn),在 A ( 0 ) = 1 A(0)=1 A(0)=1时,常数项为 1 1 1,否则还需要二次剩余计算。

多项式exp:

已知多项式 A ( x ) A(x) A(x),求一个多项式 F ( x ) F(x) F(x),使得 F ( x ) = e A ( x )        ( m o d      x n ) F(x)=e^{A(x)}\;\;\;(mod\;\;x^n) F(x)=eA(x)(modxn)

相当于求 F ( x ) F(x) F(x)满足 ln ⁡ F ( x ) ≡ A ( x )        ( m o d      x n ) \ln F(x)\equiv A(x)\;\;\;(mod\;\;x^n) lnF(x)A(x)(modxn)

G ( x ) = ln ⁡ F 0 ( x ) − A ( x ) G(x)=\ln F_0(x)-A(x) G(x)=lnF0(x)A(x)

F 0 ( x ) F_0(x) F0(x)当做一个常量,因此:
F ( x ) = F 0 ( x ) − l n F 0 ( x ) − A ( x ) 1 F 0 ( x ) F(x)=F_0(x)-\frac{lnF_0(x)-A(x)}{\frac{1}{F_0(x)}} F(x)=F0(x)F0(x)1lnF0(x)A(x)
即:
F ( x ) = F 0 ( x ) ( 1 − ln ⁡ F 0 ( x ) + A ( x ) ) F(x)=F_0(x)(1-\ln F_0(x)+A(x)) F(x)=F0(x)(1lnF0(x)+A(x))
时间复杂度 O ( n l g n ) O(nlgn) O(nlgn) A ( 0 ) = 0 A(0)=0 A(0)=0时, F ( 0 ) = 1 F(0)=1 F(0)=1

多项式k次幂

已知多项式 A ( x ) A(x) A(x)以及一个整数 k k k,求一个多项式 F ( x ) F(x) F(x),使得 F ( x ) = A ( x ) k        ( m o d      x n ) F(x)=A(x)^k\;\;\;(mod\;\;x^n) F(x)=A(x)k(modxn)

相当于求 F ( x ) F(x) F(x)满足 ln ⁡ F ( x ) − k ln ⁡ A ( x ) ≡ 0        ( m o d      x n ) \ln F(x)-k\ln A(x)\equiv 0\;\;\;(mod\;\;x^n) lnF(x)klnA(x)0(modxn)
也就是 F ( x ) − e k ln ⁡ A ( x ) ≡ 0        ( m o d      x n ) F(x)-e^{k\ln A(x)}\equiv 0\;\;\;(mod\;\;x^n) F(x)eklnA(x)0(modxn)

因此先 ln ⁡ \ln ln,再乘 k k k,再 e x p exp exp回去即可。

时间复杂度 O ( n l g n ) O(nlgn) O(nlgn)

Code详见多项式全家桶
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值