对多项式牛顿迭代算法的一些理解

· · 个人记录

求解一类多项式函数:

G(F(x))=0\pmod{x^n}

假设已知F_0(x)\equiv F(x)\pmod{x^{\lceil\frac{n}{2}\rceil}},求F_1(x)\equiv F(x)\pmod{x^n}

根据泰勒公式,在F_0(x)处展开G(F(x))

G(F(x))=\sum_{i=0}^{\infty}\frac{G^{(i)}(F_0(x))}{i!}(F(x)-F_0(x))^i

可以发现,F(x)-F_0(x)\equiv 0\pmod{x^{\lceil\frac{n}{2}\rceil}},所以(F(x)-F_0(x))^k\equiv 0\pmod{x^n}k\geq2时成立。

因此:

G(F_1(x))\equiv G(F_0(x))+G(F_1(x))(F_1(x)-F_0(x))\pmod{x^n}

根据G(F_1(x))\equiv0\pmod{x^n}整理得:

F_1(x)=F_0(x)-\frac{G(F_0(x))}{G'(F_0(x))}\pmod{x^n}

这便是大家熟知的牛顿迭代公式。

但是,在将其推广到微分方程的时候,却会出现一些问题,比如G(F_0(x))关于F_0(x)求导时F_0'(x)这一项无法定义,所以难以计算。

于是,需要引进一些新的方法。

可以将任意方程转化为:

G(F(x))\equiv A(F(x))\pmod{x^n}

其中G(x)不含有求导以及积分的运算,而A(x)可以含有。

重复上述牛顿迭代的部分,在这一步停下:

G(F_1(x))\equiv G(F_0(x))+G(F_1(x))(F_1(x)-F_0(x))\pmod{x^n}

因为满足F(x)-F_0(x)\equiv 0\pmod{x^{\lceil\frac{n}{2}\rceil}},所以推导到这一步是正确的。

这时,直接用A(F_1(x))替换G(F_1(x))

F_1(x)=F_0(x)-\frac{G(F_0(x))-A(F_0(x))}{G'(F_0(x))}\pmod{x^n}

这样处理之后,依旧涉及到微分方程,但是可以发现除了微分的部分其余部分必定是线性的。

在这种情况下,存在一个基本解法:

已知C(x)D(x)。求解:

F'(x)=C(x)F(x)+D(x)

构造U(x)V(x)使得U'(x)=C(x)U(x)V(x)=\frac{F(x)}{U(x)}

计算U(x)

\frac{U'(x)}{U(x)}=C(x) \ln U(x)=\int C(x)dx\Longrightarrow U(x)=\exp(\int C(x)dx)

计算V(x)

(U(x)V(x))'=C(x)U(x)V(x)+D(x) U(x)V'(x)+U'(x)V(x)=U'(x)V(x)+D(x) V'(x)=\frac{D(x)}{U(x)}\Longrightarrow V(x)=\int\frac{D(x)}{U(x)}dx

那么就可以使用F(x)=U(x)V(x)计算了。

对于其他形式的微分方程,可以将其转化为上述形式进行计算。

(什么时候遇到了含有高阶导的微分方程再来考虑高阶的部分吧)。