数列展示架: 母函数(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).
假设序列 ai 的 OGF 为 F(x), EGF 为 G(x), 则:
F(x)=i=0∑∞aixiG(x)=i=0∑∞i!aixi
级数的价值一般体现在它们收敛的时候, 这时候就可以用一个有限的值或表达式表达一个无穷的东西. GF 也是一样, 我们找到令含有 GF 的表达式收敛的 x 取值, 借此找到我们想要的性质.
一般情况下, 母函数可以用来求解线性递推问题. 即, 某个数列满足递推式, 即 ai 可以表示为 ai−k1, ai−k2, …一些项的线性组合.
等比数列求和
问题: 对于 q=1, 求:
i=0∑naqi
假设 ai 为常数序列, ai=a, 它的 GF 为 F(x).
F(x)a+xF(x)a+xF(x)a+xF(x)a1−xa=i=0∑∞axi=ax0+i=1∑∞axi=i=0∑∞axi=F(x)=(1−x)F(x)=F(x)
结合中学知识, 我们知道当 x∈(−1,1) 时, 和式 i=0∑∞xi 收敛. 根据上面的式子, 我们可以直接读出收敛值 1−x1.
当 x 超出此范围, 我们仍可以借助这个式子求出前 n 项和.
F(x)−xn+1F(x)=i=0∑naxi(1−xn+1)F(x)=i=0∑naxi1−xa(1−xn+1)=i=0∑naxi1−x(1−xn+1)=i=0∑nxi
因此, 对于所有 q=1, 我们得到了等比数列的前 n 项和公式:
i=0∑nqi=1−q(1−qn+1)i=1∑na1qi−1=1−qa1(1−qn)
思考在这个过程中 GF 帮我们做了什么. 在传统推到中, 我们使用到了错位相减法:
(1−x)i=0∑n=1−xn+ii=0∑n=(1−x)1−xn+i
而 GF 则是把这种方法推广到了无穷项, 更加普适, 更加形式化.
等差乘等比
既然 GF 可以帮我们进行错位相减, 那么等差乘等比这个经典错位相减问题自然也可以从这个角度思考.
问题: 对于 q=1, 求:
i=0∑n(a+id)qi
假设等差数列 ai=a+id, 设它的 OGF 为 F(x).
F(x)xF(x)(1−x)F(x)(1−x)F(x)F(x)i=0∑n(a+id)qii=0∑n(a+id)qii=0∑n(a+id)qii=0∑n(a+id)qii=0∑n(a+id)qi=i=0∑∞(a+id)xi=i=1∑∞(a+(i−1)d)xi=a+i=1∑∞dxi=a+1−xdx=1−xa+(1−x)2dx=(1−xn+1)F(x)−i=n+1∑∞(n+1)dxi=(1−xn+1)(1−xa+(1−x)2dx)−1−x(n+1)dxn+1=1−x(1−xn+1)a+(1−x)2(1−xn+1)dx−1−x(n+1)dxn+1=1−xa+(1−x)2dx−1−xxn+1(a+1−xdx+(n+1)d)=1−xa+(1−x)2dx−1−xxn+1(a+1−xd+nd)
因此, 我们得到了差比数列的前 n 项和公式:
i=0∑n(a+id)qi=1−qa+(1−q)2dq−1−qqn+1(a+1−qd+nd)i=1∑n(a+(i−1)d)qi−1=1−qa+(1−q)2dq−1−qqn(a+1−qd+(n−1)d)
如果进行二次或多次地错位相减, 将上面的操作进行多次, 还可以解决二阶甚至多阶差比数列的求和, 如求:
i=0∑nqij=0∑majij
Ai=j=0∑majij 是一个 m 阶差比数列 则需要 m 次错位相减可以求和.
斐波那契数列
斐波那契数列 Fi+2=Fi+Fi+1, 是一个线性递推数列, 其中 F0=0, F1=1.
我们设它的 OGF 为 F(x), 由定义式可得:
F(x)(1−x−x2)F(x)F(x)=x+xF(x)+x2F(x)=x=1−x−x2x
解一元二次方程 1−x−x2=0, 得 x1=−21+5, x2=−21−5, 因此:
===1−x−x2−(x+21+5)(x+21−5)(21+5)(21−5)(x+21+5)(x+21−5)(21−5x−1)(21+5x−1)
代回原式:
F(x)F(x)=(21−5x−1)(21+5x−1)x=51(21−5x−11−21+5x−11)
- GF 的线性运算
这里假设两个序列 a, b 的 OGF 分别为 F(x), G(x), 定义 ci=ai+bi, 那么显然 c 的 OGF H(x) 满足 H(x)=F(x)+G(x).
定义序列 a, b 的 OGF 分别为 F(x), G(x), 其中 bi=qai, 那么显然有满足 G(x)=qF(x).
引入了线性运算, 我们定义 Fi=51(fi−gi), 其中 fi, gi 的生成函数分别为 G1(x), G2(x), 则有 F(x)=51(G1(x)−G2(x)).
刚好满足前面我们得到的形式:
F(x)51(G1(x)−G2(x))G1(x)G2(x)=51(21−5x−11−21+5x−11)=51(21−5x−11−21+5x−11)=21−5x−11=21+5x−11
接下来用 G1(x) 求出序列 f:
G1(x)(21−5x−1)G1(x)−f0+i=1∑∞(21−5fi−1−fi)xi=21−5x−11=1=1
由每一项系数分别相等得:
⎩⎪⎨⎪⎧f0=−121−5fi−1−fi=0
解得:
fi=−(21−5)i
同理可得:
gi=−(21+5)i
因此:
FiFi=51(fi−gi)=51⎝⎛(21+5)i−(21−5)i⎠⎞
同样地, 对于其它线性递推数列, 也存在类似的方法, 常见的仍然是二阶齐次线性递推的数列. 请读者思考一般形式的二阶齐次线性递推数列 ai+2=λai+1+ϕai 的通项公式.