求解形式幂级数的一阶微分方程

为了方便本文的叙述,作出如下可能不严谨的定义: 1、如无特殊说明,f表示一个多项式。 2、如无特殊说明,F表示一个以多项式为参数的函数。

这篇文章主要是想求解这个东西:

ddxf=F(f)(modxn)

一般情况下f可以放到等式右边然后就可以用牛顿迭代来求零点了...然而这个微分非常讨厌,怎么办呢,我们还是来考虑倍增。

先来考虑泰勒展开式,假设上一次迭代的结果是f^,那么:

ddxf=∑i=0∞F(i)(f^)i!(f−f^)i

显然i≥2的项都是没有用的,于是改写为:

ddxf=F(f^)+F′(f^)(f−f^)

拆项、移项:

ddxf−F′(f^)f=F(f^)−F′(f^)f^

下面就是一波神仙操作了,我们设一个r,其值为:

r=e−∫F′(f^)dx

考虑其微分,利用复合函数求导法则得:

ddxr=e−∫F′(f^)dx⋅(−F′(f^))=−F′(f^)r

考虑对之前得式子左右同乘r:

ddxf⋅r−F′(f^)f⋅r=(F(f^)−F′(f^)f^)⋅r

于是可以发现等式左边的第二项可以转化,变为f⋅ddxr,于是等式左边就可以再利用求导法则转化:

ddxf⋅r+f⋅ddxr=ddx(f⋅r)=(F(f^)−F′(f^)f^)⋅r

于是对两边进行积分:

f⋅r=∫(F(f^)−F′(f^)f^)⋅rdx

显然再同除以r:

f=∫(F(f^)−F′(f^)f^)⋅rdxr

于是就可以倍增了...这操作真的是好强好强。

upd:分治FFT好啊...常数可以吊打上面的做法...