超几何级数的定义
超几何级数(Hypergeometric Series),或称超几何函数,是一种处理二项式系数与生成函数相关问题的有力工具,它的定义如下:
\[F\left(
\begin{matrix}
a_1,a_2,\dots,a_n\\
b_1,b_2,\dots,b_m
\end{matrix}
\middle|
z
\right)=\sum\limits_{k\geq0}\dfrac{a_1^{\overline k}a_2^{\overline k}\dots a_n^{\overline k}z^k}{b_1^{\overline k}b_2^{\overline k}\dots b_m^{\overline k}k!}
\]
是一个关于 \(z\) 的形式幂级数,其中各个 \(a_i,b_i\) 均可取任意复数,除了各个 \(b_i\) 不能为零或负整数(否则会产生除零问题)。
\(a_i\) 被称为它的上参数,\(b_i\) 被称为它的下参数。
让我们来看一些简单的例子:
\[F(|z)=e^z
\]
\[F\left(
\begin{matrix}a\\~\end{matrix}
\middle|z\right)
=\sum\limits_{k\geq0}a^{\overline k}\frac {z^k}{k!}=\sum\limits_{k\geq0}\binom {a+k-1}k=\sum\limits_{k\geq0}\binom{-a}k(-z)^k=(1-z)^{-a}
\]
超几何级数与形式幂级数
判断一个级数是否可以被超几何函数所表达,只需要观察其相邻两项的比值。这是因为
\[\begin{aligned}
\dfrac{[z^{k+1}]F}{[z^k]F}=&
\dfrac{a_1^{\overline {k+1}}\dots a_n^{\overline {k+1}}}{a_1^{\overline k}\dots a_n^{\overline k}}
\dfrac{b_1^{\overline k}\dots b_m^{\overline k}}{b_1^{\overline {k+1}}\dots b_m^{\overline {k+1}}}
\dfrac{k!}{(k+1)!}\dfrac{z^{k+1}}{z^k}
\\=&
\dfrac{(k+a_1)\dots(k+a_n)z}{(k+b_1)\dots(k+b_m)(k+1)}
\end{aligned}
\]
其中 \(F\) 缩写自超几何函数的定义式。
所以只要该级数的相邻两项之比为一个关于 \(k\) 的有理函数,即可被表达为一个超几何函数 \(f(z)=[z^0]f(z)\cdot F\)。因为分母中的因式 \((k+1)\) 是可以通过分子与分母同乘 \((k+1)\) 的方式得到的。
让我们来操作一下:求 \(f(z)=\sum\limits_{k\geq0}\binom{2k}kz^k\) 的封闭形式。
考察 \(\dfrac{[z^{k+1}]f(z)}{[z^k]f(z)}\),我们立即得到
\[\begin{aligned}
\dfrac{[z^{k+1}]f(z)}{[z^k]f(z)}=&\dfrac{\binom{2k+2}{k+1}z^{k+1}}{\binom{2k}kz^k}\\
=&\dfrac{(2k+2)!k!k!z}{(k+1)!(k+1)!(2k)!}\\
=&\dfrac{(2k+2)(2k+1)z}{(k+1)(k+1)}\\
=&\dfrac{(k+1/2)(4z)}{(k+1)}
\end{aligned}
\]
所以
\[\sum\limits_{k\geq0}\binom{2k}kz^k=\binom00F\left(\begin{matrix}1/2\\~\end{matrix}\middle|4z\right)=(1-4z)^{-1/2}
\]
尽管我们可以用基本生成函数运算将原式变为卡特兰数的形式并借助卡特兰数的生成函数解决问题,但这种方法无疑更为简单且机械化。
容易得到,阶乘(二项式系数)、幂、指数函数的相邻两项之比都是多项式的,故而我们在 OI 中能遇到的大部分组合的级数都可以写成超几何级数的形式。
斯特林数与超几何级数的相性较差,笔者暂时无法想到如何融合二者。
超几何级数与常系数微分方程
将 \(F\) 对 \(z\) 求导,我们得到
\[\begin{aligned}
\dfrac{\text dF}{\text dz}=&\sum\limits_{k>0}\dfrac{a_1^{\overline k}\dots a_n^{\overline k}z^{k-1}}
{b_1^{\overline k}\dots b_m^{\overline k}(k-1)!}\\
=&\sum\limits_{k+1>0}\dfrac{a_1^{\overline {k+1}}\dots a_n^{\overline {k+1}}z^k}
{b_1^{\overline {k+1}}\dots b_m^{\overline {k+1}}k!}\\
=&\sum\limits_{k\geq0}\dfrac{a_1(a_1+1)^{\overline k}\dots a_n(a_n+1)^{\overline k}z^k}
{b_1(b_1+1)^{\overline k}\dots b_m(b_m+1)^{\overline k}k!}\\
=&\dfrac{a_1\dots a_n}{b_1\dots b_m}F\left(
\begin{matrix}a_1+1,\dots,a_n+1\\b_1+1,\dots,b_m+1\end{matrix}
\middle|z\right)
\end{aligned}
\]
将所有参数移出来了并将超几何函数内部的所有参数加一。
定义算子 \(\vartheta=z\cdot\dfrac{\text d}{\text dz}\),易得
\[\vartheta F=\sum\limits_{k\geq0}k\dfrac{a_1^{\overline k}\dots a_n^{\overline k}z^k}{b_1^{\overline k}\dots b_m^{\overline k}k!}
\]
它本身不太有用,但是一但我们可以把 \(k\) 提出来,我们就能构造算子 \(\vartheta+a_1\),则
\[\begin{aligned}
(\vartheta+a_1)F=&\sum\limits_{k\geq0}(k+a_1)\dfrac{a_1^{\overline k}\dots a_n^{\overline k}z^k}{b_1^{\overline k}\dots b_m^{\overline k}k!}\\
=&\sum\limits_{k\geq0}a_1\dfrac{(a_1+1)^{\overline k}a_2^{\overline k}\dots a_n^{\overline k}z^k}{b_1^{\overline k}\dots b_m^{\overline k}k!}\\
=&a_1F\left(
\begin{matrix}a_1+1,a_2,\dots,a_n\\b_1,\dots,b_m\end{matrix}
\middle|z\right)
\end{aligned}
\]
它只修改并移动了一个参数。
类似地,我们有
\[(\vartheta+b_1-1)F=b_1F\left(
\begin{matrix}a_1,\dots,a_n\\b_1-1,b_2,\dots,b_m\end{matrix}
\middle|z\right)
\]
证明从略。
有了这样两个算子之后,我们就能得到
\[(\vartheta+a_1)\dots(\vartheta+a_n)F=a_1\dots a_nF\left(
\begin{matrix}a_1+1,\dots,a_n+1\\b_1,\dots,b_m\end{matrix}
\middle|z\right)
\]
以及
\[(\vartheta+b_1-1)\dots(\vartheta+b_m-1)F=(b_1-1)\dots (b_m-1)F\left(
\begin{matrix}a_1,\dots,a_n\\b_1-1,\dots,b_m-1\end{matrix}
\middle|z\right)
\]
然后我们惊奇地发现:由超几何函数的导数,下一行的导数正好是上一行!
于是我们有微分方程
\[\text D(\vartheta+b_1-1)\dots(\vartheta+b_m-1)F=(\vartheta+a_1)\dots(\vartheta+a_n)F
\]
其中 \(\text D\) 为微分算子 \(\dfrac{\text d}{\text dz}\)。
当然这么一堆算子挤在这里的确十分抽象,让我们来举例说明一下。
\(F\left(
\begin{matrix}a,b\\c\end{matrix}
\middle|z\right)\) 所对应的微分方程是什么呢?
根据上式,我们有
\[D(\vartheta+c-1)F=(\vartheta+a)(\vartheta+b)F
\]
左式:
\[\begin{aligned}
D(\vartheta+c-1)F=&\text D(z\text D+c-1)F\\
=&D(zF'+(c-1)F)\\
=&zF''+F'+(c-1)F'
\end{aligned}
\]
右式:
\[\begin{aligned}
(\vartheta+a)(\vartheta+b)F=&(\vartheta+a)(zF'+bF)\\
=&(z^2F''+zF'+bzF')+(azF'+abF)
\end{aligned}
\]
综上,有
\[(z-z^2)F''+(c-(a+b+1)z)F'-abF=0
\]
将超几何函数表示为微分方程的意义在于我们能够很容易地对其取 \(n\) 次方项,从而获得一个递推式。
例如,对于上式,我们有
\[n(n+1)f_{n+1}-(n-1)nf_n+c(n+1)f_{n+1}-(a+b+1)nf_n-abf_n=0
\]
也就是说,我们获得了一个机械的方法从一个超几何级数变化到一个递推式。