多项式入门
常见导数
首先铺垫一些基本函数的导数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 ↩
修订记录
- 2021年3月31日 第3次修订
- 2021年2月4日 第2次修订
- 2020年5月28日 创建文章