常见导数

首先铺垫一些基本函数的导数3

多项式积分

泰勒展开

泰勒展开可以将一个函数表示为无穷级数,也称为泰勒级数(Taylor Series)1

其中比较常用的是处的展开,也称麦克劳林展开:

多项式牛顿迭代

牛顿迭代法本用于逼近方程的根,而多项式牛顿迭代2则指在多项式环上求出模意义下的根。实际上越大那么求出的根越接近真实的根,这与牛顿迭代法是类似的。

已知函数,求多项式,使得

考虑倍增。假设我们求出了使得

首先注意到,因此,即他们的低位是一样的。

考虑将处泰勒展开:

注意到把低位都减没了。的最低次数项的次数都是,因此可以直接忽略了。即

因为,化简得到

也可以简记为

牛迭与多项式牛迭

接触过牛顿迭代的读者会知道,对于一个连续且单调的函数,我们要求的近似解,则迭代的公式为

牛顿迭代可以直观理解:如果当前位置的点值和导数点值同号,说明在根的右边;否则说明在根的左边。

那么多项式牛顿迭代又怎么直观理解呢?

多项式环是没有数轴的说法的。不过我们可以把它看作是向一个多项式逼近的过程,就像泰勒展开一样。变成,代入,它的增量是不断变小(收敛)的。如果的话是发散的,这不在我们讨论的范围中。也就是说在的时候,多项式的高次项对点值的影响就越小。因此倍增牛迭可以理解为是添加高次项来逼近多项式。

接下来我们来看一下多项式牛顿迭代的应用。

多项式求逆

求模意义下多项式的逆。形式化地说:对于多项式,求出使得

首先介绍求逆的算法。

那么。对于,有。即。这样就可以递推求出

使用牛顿迭代法可以更快。

那么问题转化为了求满足的解。应用牛顿迭代得到

那么使用 FFT/NTT 即可在的时间内计算。

多项式开方

的平方根。即求一个多项式使得

与求逆类似,我们仍然可以递推地在时间内求出

仍然考虑多项式牛迭。

。应用牛顿迭代得到

时间复杂度

多项式对数

考虑计算一个多项式的对数函数(ln),记作。首先我们要了解的级数形式。

考虑在原点的泰勒展开:

这样一来,我们就可以定义

换句话说对于的多项式,我们把它理解为的形式,就可以理解为上述定义。

之所以要求常数项是,是因为,不用考虑离散对数等等的问题。同时方便我们计算。

接下来考虑计算求出。首先做复合函数求导:

两边同时积分得到

这样就可以用多项式求逆来计算了。这样计算的一个问题是,求导再积分后,常数项就没了。如果就会比较好办,此时的常数项为

除此之外,我们仍然可以递推求解。设)。

根据,对于

整理一下得到。这样就可以递推了。

注:

多项式指数

考虑计算一个多项式的指数函数4(exp),记作或者

仿照的定义,我们将在原点泰勒展开得到

因此可以得到

考虑求。设。应用牛顿迭代得到

容易发现在常数项为时上式是容易计算的。

时间复杂度

再考虑递推求解。考虑求导:

,那么

整理一下有),当时有

模板代码

1. https://en.wikipedia.org/wiki/Taylor_series

2. http://blog.miskcoo.com/2015/06/polynomial-with-newton-method#i-4

3. https://zh.wikipedia.org/wiki/%E5%AF%BC%E6%95%B0%E5%88%97%E8%A1%A8

4. https://zh.wikipedia.org/wiki/%E6%8C%87%E6%95%B0%E5%87%BD%E6%95%B0