数列展示架:母函数 普通母函数篇

数列展示架: 母函数(Generating Function)

Updated on Oct14th 2024

普通母函数篇

A generating function is a clothesline on which we hang up a sequence of numbers for display.
----Herbert Wilf

定义

GF 有很多不同的形式, 在解决不同的问题时我们按需选择合适的形式, 常用的一般有 OGF (Ordinary GF), EGF (Exponential GF).

假设序列 aia_i 的 OGF 为 F(x)F(x), EGF 为 G(x)G(x), 则:

F(x)=i=0aixiG(x)=i=0aixii!F(x) = \sum_{i = 0}^{\infin} a_ix^i\\ G(x) = \sum_{i = 0}^{\infin} \dfrac{a_ix^i}{i!}

级数的价值一般体现在它们收敛的时候, 这时候就可以用一个有限的值或表达式表达一个无穷的东西. GF 也是一样, 我们找到令含有 GF 的表达式收敛的 xx 取值, 借此找到我们想要的性质.

一般情况下, 母函数可以用来求解线性递推问题. 即, 某个数列满足递推式, 即 aia_i 可以表示为 aik1a_{i - k_1}, aik2a_{i - k_2}, …一些项的线性组合.

等比数列求和

问题: 对于 q1q \neq 1, 求:

i=0naqi\sum_{i = 0}^n aq^i

假设 aia_i 为常数序列, ai=aa_i = a, 它的 GF 为 F(x)F(x).

F(x)=i=0axia+xF(x)=ax0+i=1axia+xF(x)=i=0axia+xF(x)=F(x)a=(1x)F(x)a1x=F(x)\begin{aligned} F(x) &= \sum_{i = 0}^{\infin} ax^i\\ a + xF(x) &= ax^0 + \sum_{i = 1}^{\infin} ax^i\\ a + xF(x) &= \sum_{i = 0}^{\infin} ax^i\\ a + xF(x) &= F(x)\\ a &= (1 - x)F(x)\\ \frac a{1 - x} &= F(x) \end{aligned}

结合中学知识, 我们知道当 x(1,1)x\in (-1,1) 时, 和式 i=0xi\displaystyle{\sum_{i = 0}^{\infin} x^i} 收敛. 根据上面的式子, 我们可以直接读出收敛值 11x\frac 1{1 - x}.

xx 超出此范围, 我们仍可以借助这个式子求出前 nn 项和.

F(x)xn+1F(x)=i=0naxi(1xn+1)F(x)=i=0naxia(1xn+1)1x=i=0naxi(1xn+1)1x=i=0nxiF(x) - x^{n + 1}F(x) = \sum_{i = 0}^{n} ax^i\\ (1 - x^{n + 1})F(x) = \sum_{i = 0}^{n} ax^i\\ \frac{a(1 - x^{n + 1})}{1 - x} = \sum_{i = 0}^{n} ax^i\\ \frac{(1 - x^{n + 1})}{1 - x} = \sum_{i = 0}^{n} x^i\\

因此, 对于所有 q1q \neq 1, 我们得到了等比数列的前 nn 项和公式:

i=0nqi=(1qn+1)1qi=1na1qi1=a1(1qn)1q\sum_{i = 0}^n q^i = \frac{(1 - q^{n + 1})}{1 - q}\\ \sum_{i = 1}^n a_1q^{i - 1} = \frac{a_1(1 - q^{n})}{1 - q}

思考在这个过程中 GF 帮我们做了什么. 在传统推到中, 我们使用到了错位相减法:

(1x)i=0n=1xn+ii=0n=1xn+i(1x)(1 - x)\sum_{i = 0}^{n} = 1 - x^{n + i}\\ \sum_{i = 0}^{n} = \frac{1 - x^{n + i}}{(1 - x)}

而 GF 则是把这种方法推广到了无穷项, 更加普适, 更加形式化.

等差乘等比

既然 GF 可以帮我们进行错位相减, 那么等差乘等比这个经典错位相减问题自然也可以从这个角度思考.

问题: 对于 q1q \neq 1, 求:

i=0n(a+id)qi\sum_{i = 0}^n (a + id)q^i

假设等差数列 ai=a+ida_i = a + id, 设它的 OGF 为 F(x)F(x).

F(x)=i=0(a+id)xixF(x)=i=1(a+(i1)d)xi(1x)F(x)=a+i=1dxi(1x)F(x)=a+dx1xF(x)=a1x+dx(1x)2i=0n(a+id)qi=(1xn+1)F(x)i=n+1(n+1)dxii=0n(a+id)qi=(1xn+1)(a1x+dx(1x)2)(n+1)dxn+11xi=0n(a+id)qi=(1xn+1)a1x+(1xn+1)dx(1x)2(n+1)dxn+11xi=0n(a+id)qi=a1x+dx(1x)2xn+11x(a+dx1x+(n+1)d)i=0n(a+id)qi=a1x+dx(1x)2xn+11x(a+d1x+nd)\begin{aligned} F(x) &= \sum_{i = 0}^{\infin} (a + id)x^i\\ xF(x) &= \sum_{i = 1}^{\infin} (a + (i - 1)d)x^i\\ (1 - x)F(x) &= a + \sum_{i = 1}^{\infin} dx^i\\ (1 - x)F(x) &= a + \frac{dx}{1 - x}\\ F(x) &= \frac a{1 - x} + \frac{dx}{(1 - x)^2}\\ \sum_{i = 0}^n (a + id)q^i &= (1 - x^{n + 1})F(x) - \sum_{i = n + 1}^{\infin} (n + 1)dx^i\\ \sum_{i = 0}^n (a + id)q^i &= (1 - x^{n + 1})(\frac a{1 - x} + \frac{dx}{(1 - x)^2}) - \frac{(n + 1)dx^{n + 1}}{1 - x}\\ \sum_{i = 0}^n (a + id)q^i &= \frac {(1 - x^{n + 1})a}{1 - x} + \frac{(1 - x^{n + 1})dx}{(1 - x)^2} - \frac{(n + 1)dx^{n + 1}}{1 - x}\\ \sum_{i = 0}^n (a + id)q^i &= \frac a{1 - x} + \frac{dx}{(1 - x)^2} - \frac{x^{n + 1}}{1 - x}(a + \frac{dx}{1 - x} + (n + 1)d)\\ \sum_{i = 0}^n (a + id)q^i &= \frac a{1 - x} + \frac{dx}{(1 - x)^2} - \frac{x^{n + 1}}{1 - x}(a + \frac{d}{1 - x} + nd)\\ \end{aligned}

因此, 我们得到了差比数列的前 nn 项和公式:

i=0n(a+id)qi=a1q+dq(1q)2qn+11q(a+d1q+nd)i=1n(a+(i1)d)qi1=a1q+dq(1q)2qn1q(a+d1q+(n1)d)\sum_{i = 0}^n (a + id)q^i = \frac a{1 - q} + \frac{dq}{(1 - q)^2} - \frac{q^{n + 1}}{1 - q}(a + \frac{d}{1 - q} + nd)\\ \sum_{i = 1}^n (a + (i - 1)d)q^{i - 1} = \frac a{1 - q} + \frac{dq}{(1 - q)^2} - \frac{q^n}{1 - q}(a + \frac{d}{1 - q} + (n - 1)d)

如果进行二次或多次地错位相减, 将上面的操作进行多次, 还可以解决二阶甚至多阶差比数列的求和, 如求:

i=0nqij=0majij\sum_{i = 0}^{n} q^i \sum_{j = 0}^m a_ji^j

Ai=j=0majij\displaystyle{A_i = \sum_{j = 0}^m a_ji^j} 是一个 mm 阶差比数列 则需要 mm 次错位相减可以求和.

斐波那契数列

斐波那契数列 Fi+2=Fi+Fi+1F_{i + 2} = F_i + F_{i + 1}, 是一个线性递推数列, 其中 F0=0F_0 = 0, F1=1F_1 = 1.

我们设它的 OGF 为 F(x)F(x), 由定义式可得:

F(x)=x+xF(x)+x2F(x)(1xx2)F(x)=xF(x)=x1xx2\begin{aligned} F(x) &= x + xF(x) + x^2F(x)\\ (1 - x - x^2)F(x) &= x\\ F(x) &= \frac x{1 - x - x^2} \end{aligned}

解一元二次方程 1xx2=01 - x - x^2 = 0, 得 x1=1+52x_1 = -\frac{1 + \sqrt 5}2, x2=152x_2 = -\frac{1 - \sqrt 5}2, 因此:

1xx2=(x+1+52)(x+152)=(1+52)(152)(x+1+52)(x+152)=(152x1)(1+52x1)\begin{aligned} &1 - x - x^2\\ =&-(x + \frac{1 + \sqrt 5}2)(x + \frac{1 - \sqrt 5}2)\\ =&(\frac{1 + \sqrt 5}2)(\frac{1 - \sqrt 5}2)(x + \frac{1 + \sqrt 5}2)(x + \frac{1 - \sqrt 5}2)\\ =&(\frac{1 - \sqrt 5}2x - 1)(\frac{1 + \sqrt 5}2x - 1) \end{aligned}

代回原式:

F(x)=x(152x1)(1+52x1)F(x)=15(1152x111+52x1)\begin{aligned} F(x) &= \frac x{(\frac{1 - \sqrt 5}2x - 1)(\frac{1 + \sqrt 5}2x - 1)}\\ F(x) &= \frac 1{\sqrt5} \left(\frac 1{\frac{1 - \sqrt 5}2x - 1} - \frac 1{\frac{1 + \sqrt 5}2x - 1}\right) \end{aligned}

  • GF 的线性运算
    这里假设两个序列 aa, bb 的 OGF 分别为 F(x)F(x), G(x)G(x), 定义 ci=ai+bic_i = a_i + b_i, 那么显然 cc 的 OGF H(x)H(x) 满足 H(x)=F(x)+G(x)H(x) = F(x) + G(x).
    定义序列 aa, bb 的 OGF 分别为 F(x)F(x), G(x)G(x), 其中 bi=qaib_i = qa_i, 那么显然有满足 G(x)=qF(x)G(x) = qF(x).

引入了线性运算, 我们定义 Fi=15(figi)F_i = \frac 1{\sqrt 5} (f_i - g_i), 其中 fif_i, gig_i 的生成函数分别为 G1(x)G_1(x), G2(x)G_2(x), 则有 F(x)=15(G1(x)G2(x))F(x) = \frac 1{\sqrt 5}(G_1(x) - G_2(x)).

刚好满足前面我们得到的形式:

F(x)=15(1152x111+52x1)15(G1(x)G2(x))=15(1152x111+52x1)G1(x)=1152x1G2(x)=11+52x1\begin{aligned} F(x) &= \frac 1{\sqrt5} \left(\frac 1{\frac{1 - \sqrt 5}2x - 1} - \frac 1{\frac{1 + \sqrt 5}2x - 1}\right)\\ \frac 1{\sqrt 5} (G_1(x) - G_2(x)) &= \frac 1{\sqrt5} \left(\frac 1{\frac{1 - \sqrt 5}2x - 1} - \frac 1{\frac{1 + \sqrt 5}2x - 1}\right)\\ G_1(x) &= \frac 1{\frac{1 - \sqrt 5}2x - 1}\\ G_2(x) &= \frac 1{\frac{1 + \sqrt 5}2x - 1} \end{aligned}

接下来用 G1(x)G_1(x) 求出序列 ff:

G1(x)=1152x1(152x1)G1(x)=1f0+i=1(152fi1fi)xi=1\begin{aligned} G_1(x) &= \frac 1{\frac{1 - \sqrt 5}2x - 1}\\ \left(\frac{1 - \sqrt 5}2x - 1\right)G_1(x) &= 1\\ -f_0 + \sum_{i = 1}^{\infin} \left(\frac{1 - \sqrt 5}2f_{i - 1} - f_i\right)x^i &= 1\\ \end{aligned}

由每一项系数分别相等得:

{f0=1152fi1fi=0\left\{ \begin{aligned} &f_0 = -1\\ &\frac{1 - \sqrt 5}2f_{i - 1} - f_i = 0 \end{aligned} \right.

解得:

fi=(152)if_i = -\left(\frac{1 - \sqrt 5}2\right)^i

同理可得:

gi=(1+52)ig_i = -\left(\frac{1 + \sqrt 5}2\right)^i

因此:

Fi=15(figi)Fi=15((1+52)i(152)i)\begin{aligned} F_i &= \frac 1{\sqrt 5} (f_i - g_i)\\ F_i &= \frac 1{\sqrt 5} \left(\left(\frac{1 + \sqrt 5}2\right)^i - \left(\frac{1 - \sqrt 5}2\right)^i\right) \end{aligned}

同样地, 对于其它线性递推数列, 也存在类似的方法, 常见的仍然是二阶齐次线性递推的数列. 请读者思考一般形式的二阶齐次线性递推数列 ai+2=λai+1+ϕaia_{i + 2} = \lambda a_{i + 1} + \phi a_i 的通项公式.