算法简介
Gosper 算法是一个用来求一些超几何项的离散不定积分的封闭形式的算法。特别地,所求的是一些形如
的函数的离散不定积分。
形式化地,我们想要求出以另一个超几何项 满足
本文大部分翻译自 Marko Petkovšek, Herbert S. Wilf 和 Doron Zeilberger 合著的 A=B 一书的 Chapter 5: Gosper's Algorithm。
记号
本文中 和 的优先级均大于 、 和 ,小于隐式乘法。
在本文中, 被定义为多项式 的最高项次数, 被定义为多项式 的最高项系数, 被定义为非常多项式 的次高项系数。
本文用 来描述“互素”,譬如 等价于 。
基本思路
首先我们不难发现
是一个关于 的有理函数。于是我们设其为有理函数 ,将 代入 式得到
设 则有
假设我们能够把 写成
的形式(在后文我们会给出一个算法来将任意有理函数 分解),满足
在后续的证明中,我们会发现我们将解有理函数的问题转为了解多项式的问题。
考虑将 写成
的形式,代入 式得
显然 是有理函数。事实上我们能够证明, 实际上甚至是多项式:
假设结论是错的,那么我们就能将 写成两个互素的多项式 和 之比 ,其中 。代入 :
设 为使 不为常多项式的最大整数 ,容易知道 。设 为 和 的一个非常多项式的不可约公因式。将 代入 知:
因为 ,故 。若 ,则 ,即 不为常多项式,这与我们对 的选取不符。因此 ,进而 。
同样地,将 代入 式得:
由于 ,以及 (因为 不能同时整除 和 ),我们有 。于是 是 和 的一个非常多项式公因子,这与假设 矛盾,因而 是一个多项式。
现在我们确定了 Gosper 算法的基本流程:
- 将 分解成 的形式,同时满足 式的限制;
- 找到 式的解 ,或发现无解;
- 若有解,返回 。
分解
首先设 (为了方便,令 和 均为首一多项式,这样可能会在最后需要乘一个系数),其中 。如果 满足 的限制,那我们可以直接将 分解成 ,, 的形式。
否则,如果存在 使得 和 有公因式 ,则我们可以从 中提取一个因式 ,从 中提取一个因式 ,从而递归下去。分解出来的因式直接让 乘上 即可。
唯一问题是,如何判断 和 是否满足 式?
一个做法是使用多项式结式(resultant)。
域 上两个关于 的多项式 和 的结式 由下式定义:
其中域 是域 的代数闭包,即,所有以 中元素为系数的多项式的解都在 内。
事实上, 的一个等价定义是:
根据以上两种定义不难得到结式的以下性质:
于是我们可以得到一个 的求解结式的 Euclid 算法:
事实上,还有一种被称为 Half-GCD 的算法可以在 的时间复杂度内求出 和 的结式,其中 。
不难发现,两个非常多项式 和 有公共根当且仅当 。我们设 ,则所有违反 式的 即为 的非负整数根。
如何在 上解 ?首先我们仅保留和分母互素的分子 ,于是只需要解 ,其中 是多项式。如果 的系数在 内,则我们可以通过先将其化为首一多项式,并枚举其常数项的因数来得到其所有的有理根。事实上,还有一种更加高效的、利用 进数的算法可以解决这个问题。
更加通用地,设 为以 中元素为系数的关于 的有理函数所组成的元素。假设我们已经拥有一种处理 的系数在 内的算法,那么我们可以以如下方式构建出 所对应的算法:
首先做转换
其中 。如果有 满足 ,那么就有
分类讨论:
- 如果 在 中是超越的,那么显然 对全部 内的整数 成立;
- 如果存在一个系数在 内的多项式的根为 ,且 为多项式的最小次数。则 。于是,。于是使 式成立的唯一可能是 对全体 内整数 成立。
无论如何都有 。于是我们可以对 分别应用 。
另一种做法是将 和 化成若干个不可约多项式乘积(注意不必在整个代数闭包上完全分解),那么我们需要找到一个 的不可约因式 和 的一个不可约因式 满足存在 使得 ,这样 和 就有一个非常多项式公因式,即 违反 式。注意到一个因式对 满足条件的一个必要条件是 。设 ,,那么通过比较次大项系数我们发现唯一可能满足条件的 。
在实践中,通常 和 已经被分解成一次因式了,这可能是因为初始的超几何项即为二项式系数和阶乘的乘积。此时,两种做法是完全相同的。如果 和 未被分解,则通常而言就算要使用结式,事先分解 和 也通常能加速结式的计算。那为什么还需要使用结式做法呢?这是因为在任何域上我们都能计算多项式结式,但目前人们还尚未知道通用的因式分解方法。
不难验证,通过“基本思路”中过程得到的 的分解 是一个互素、唯一、次数最小的形式。
解
在这节我们希望能解出满足 式的多项式 。假定我们能知道 的一个范围,我们就可以使用待定系数法列出一个线性方程组以解出 。
设 ,我们希望知道 的可能值。可以分类讨论一下:
先得到 的可能取值范围,找到其中最大的自然数 。如果 不存在则无法找到封闭形式,否则直接待定系数法。如果待定系数法无解则亦无法找到封闭形式。
小练习
通过 Gosper 算法求下述和式的封闭形式。
其中 摘自 , 摘自 , 摘自 。
参考资料
- Marko Petkovšek, Herbert S. Wilf and Doron Zeilberger, A=B, 83-100.
致谢
感谢 @Y_B_X 同学给予的许多指导和帮助。
Reference
: E.I., HALF-GCD 算法的阐述.
: Loos, R., Computing rational zeros of integral polynomials by -adic expansion, SIAM J. Comp. 12 (1983), 286-293.
: Gosper, R. W., Jr., Indefinite hypergeometric sums in MACSYMA, in: Proc. 1977 MACSYMA Users' Conference, Berkeley, 1977, 237-251.
: Abramov, S. A., On the summation of rational functions, USSR Comp. Maths. Math. Phys. 11 (1971), 324-330.
: Man, Y. K., On computing closed forms for indefinite summations, J. Symbolic Computation 16 (1993), 355-376.