跳转至

多项式牛顿迭代

描述

给定多项式 G(x,y),已知多项式 f(x) 满足:

G(x,f(x))0(modxn)

且存在数值 f1 使 G(x,y) 满足以下条件:

  • G(0,f1)=0
  • Gy(0,f1)0

求出模 xn 意义下的 f(x)

Newton's Method

考虑倍增。

首先当 n=1 时,[x0]G(x,f(x))=0 的解需要单独求出,假设中的 f1 即为一个解。

假设现在已经得到了模 xn2 意义下的解 fn2(x),要求模 xn 意义下的解 f(x)=fn(x)

G(x,f(x))f(x)f(x)=fn2(x) 处进行泰勒展开,有:

i=0+iGyi(x,fn2(x))i!(f(x)fn2(x))i0(modxn)

因为 f(x)fn2(x) 的最低非零项次数最低为 n2,故有:

2i:(f(x)fn2(x))i0(modxn)

则:

i=0+iGyi(x,fn2(x))i!(f(x)fn2(x))iG(x,fn2(x))+Gy(x,fn2(x))[f(x)fn2(x)]0(modxn)fn(x)fn2(x)G(x,fn2(x))Gy(x,fn2(x))(modxn)

或者

f2n(x)fn(x)G(x,fn(x))Gy(x,fn(x))(modx2n)

例题

多项式求逆

设给定函数为 h(x),有:

G(x,y)=1yh(x)

应用 Newton's Method 可得:

f2n(x)fn(x)1/fn(x)h(x)1/fn2(x)(modx2n)2fn(x)fn2(x)h(x)(modx2n)

时间复杂度

T(n)=T(n2)+O(nlogn)=O(nlogn)

多项式开方

设给定函数为 h(x),有:

G(x,y)=y2h(x)0

应用 Newton's Method 可得:

f2n(x)fn(x)fn2(x)h(x)2fn(x)(modx2n)fn2(x)+h(x)2fn(x)(modx2n)

时间复杂度

T(n)=T(n2)+O(nlogn)=O(nlogn)

多项式指数函数

设给定函数为 h(x),有:

G(x,y)=lnyh(x)

应用 Newton's Method 可得:

f2n(x)fn(x)lnfn(x)h(x)1/fn(x)(modx2n)fn(x)(1lnfn(x)+h(x))(modx2n)

时间复杂度

T(n)=T(n2)+O(nlogn)=O(nlogn)

手算演示

为了方便理解,这里举几个例子演示一下算法流程。

复数多项式模多项式的平方根

假设 h 是一个不被 x 整除(有常数项)的复数多项式,求它对模 xn 的平方根。

我们有方程:

G(f(x))=f2(x)h(x)0(modxn)

Taylor 展开 G 得到下式。注意这里是对 f 的展开,所以导数都是对 f 的偏导数,x 在这里是当成常数算的。

G(f(x))=i=0+G(i)(f0(x))i!(f(x)f0(x))i=G(f0(x))+2f0(x)(f(x)f0(x))+(f(x)f0(x))2

用倍增计算。假设倍增中的中间结果是 f0(x),f1(x),,fj(x),或者数学严谨地说 fj(x) 是满足 G(fj(x))0(modx2j) 的一个复数多项式,且为了唯一性它同时满足以下两个条件:

  • fj(x) 次数不超过 x2j
  • fj+k(x)fj(x)0(modx2j),对所有 k

fj+1(x)fj(x) 代入上面的式子就有:

G(fj+1(x))=G(fj(x))+2fj(fj+1(x)fj(x))+(fj+1(x)fj(x))20(modx2j+1)

显然 fj+1(x)fj(x) 必然是 x2j 的倍数。于是得到

fj+1(x)fj(x)fj2(x)h(x)2fj(x)fj(x)2+h(x)2fj(x)(modx2j+1)

如果 fj(x) 存在,那么 2fj(x) 不被 x 整除(有常数项),所以必然有模 x2j+1 的逆元。因此数列 f0,f1,fj 存在当且仅当 f0 存在。不被 x 整除的复数多项式 h(x)x 的平方根是一定存在的,因为 h(x) 模掉 x 就是个普通非零复数,一定有两个平方根。所以可以对所有有常数项的 h(x) 用这个算法。

h(x)=x+1 举例计算如下:

  • f0(x)=1,f1(x)=12+x+12×1modx2=12x+1,f2(x)=(12x+1)2+x+12×(12x+1)modx4=116x318x2+12x+1,
  • f0(x)=1,f1(x)=(1)2+x+12×(1)modx2=12x1,(等于前一个取负)

可以验证两个都是正确的模平方根多项式列。

整数模素数幂的平方根

牛顿迭代算法还可以迁移到整数模素数的幂的情况。 假设 h 是一个不被 3 整除的「方便的」整数。(「方便」指「必然有解」,具体条件后文再言)假设要算 h 在模 3n 意义下的平方根 f。有方程:

G(f)=f2h0(mod3n)

Taylor 展开 G 得到:

G(f)=i=0+G(i)(f0)i!(ff0)i=G(f0)+2f0(ff0)+(ff0)2

用倍增计算。假设倍增中得到的中间结果是 f0,f1,,fj,或者严谨地说 fj 是满足 G(fj)0(mod32j) 的一个整数,且为了唯一性它同时满足以下两个条件:

  • 0<fj<32j
  • fj+kfj0(mod32j),对所有 k

fj+1fj 代入上面的式子就有:

G(fj+1)=G(fj)+2fj(fj+1fj)+(fj+1fj)20(mod32j+1)

显然 fj+1fj 必然是 32j 的倍数。于是得到

fj+1fjfj2h2fjfj2+h2fj(mod32j+1)

如果 fj 存在,那么 2fj 不被 3 整除,所以必然有模 32j+1 的逆元。因此数列 f0,f1,fj 存在当且仅当 f0 存在。不被 3 整除的整数 h3 的平方根要么不存在,要么有两个。所以 h 有模 3 平方根就是整个算法能跑的唯一条件。

这里选 h=46 实际计算示例。

  • f0=1,f1=12+462×1mod9=1,f2=12+462×1mod81=64,f3=642+462×64mod6561=955,
  • f0=2,f1=22+462×2mod9=8,f2=82+462×8mod81=17,f3=172+462×17mod6561=5606,(等于前一个取负)

可以验证一下两个都是正确的模平方根数列。

代数证明

这一节对前文进行引申,用抽象代数的语言证明只要 f 满足初始解条件,牛顿法对所有的 n 都能给出解,并且可以得到全部的解。

有解的证明

引理 1

整环 R 有多项式或 形式幂级数 f(X)=i0aiXir,pR 使得 f(r)Rp(亦即 rf(X) 在模 p 意义下的根)且 f(r)R 在模 p 意义下是可逆的。这里 f(X):=i0(i+1)ai+1Xif(X)形式导数。那么 f(rf(r)f(r))0(modp2)

证明

对所有 sR

f(r+sp)=i0ai(r+sp)i=i0airi+spi1iairi1+s2p2()=f(r)+spf(r)+s2p2(f(r)2!+),

所以

f(r+sp)Rp2f(r)+f(r)spRp2

因为 f(r)Rp,且 f(r) 可逆,所以取 sp=f(r)f(r) 即可,这里 1f(r) 是模 p2 意义下的逆元。因为 f(r) 在模 p 意义下可逆,所以它在模 p2 意义下也必定存在逆元:设有 a,b,cR 使 af(r)=bp+1f(r)=cp,那么 (a2f(r)2)f(r)=b2p2+1,故可以取 s=c(2a2f(r))

对于域 k 上的多项式环 k[X],设有 G(X,Y)k[X,Y]fnk[X] 使 G(X,fn(X))k[X]Xn,那么应用引理 1 就可得到

G(X,fn(X)G(X,fn(X))GY(X,fn(X)))0(modX2n)

而倍增的初始条件只要有 f1k 使得 G(X,f1)0(modX)GY(X,f1)0(modX)。后一个条件保证了 GY 有非零常数项,同时因为 X|G(X,fn(X))GY(X,fn(X)),故而对所有的 nGY(X,fn) 总是模 Xn 意义下可逆的,也就满足了下一次迭代的条件。

得到全部解的证明

引理 2

RUFDf,r,p 定义同引理 1。则引理 1 给出的 rf(r)f(r) 是模 p2 意义下唯一满足以下两条件的 x 的值:

  • f(x)Rp2
  • xrRp

亦即

xR,p2f(x)p(xr)xrf(r)f(r)(modp2)
证明

s=f(r)f(r)pu=r+sp,引理 1 保证 u 满足两个条件,且 f(r)+f(r)spRp2。 设 v 是满足上述条件的值,则有 v=r+tpf(r)+f(r)tpRp2。 于是有 f(r)(ts)pRp2vuRp2

牛顿法可以保证得到模 X2n 的全部解。假设 G(X,h)0(modX2n),那么令 h2i:=h(modX2i),然后取 f1=h1 并用牛顿法,根据引理 2 可得 f2ih2i(modX2i),所以一定有 f2n=h

上面的论证也说明了,在 Gy(0,y) 永远可逆时,G(X,f)0(modXn) 的解的个数等于 G(0,f)0(modX) 的解的个数。这个结论并非平凡。请看下面的例子。

牛顿法无效时解的个数随次数而变多的例子

X 意义下 X2 的平方根只有 0,但是模 X4 意义下 X2 的平方根有 X,X,X3+X,