总是看到有人问递推的通项公式如何求,母函数(Generating function)是一个很好用的工具,
现总结如下以供学习
母函数是组合数学里面的概念,其实就是这坨东西
是不是看不明白,确实有些生疏,再看这一坨
恍然大悟,这不就是久负盛名的数列求和公式么!既然如此,看看它是如何应用于通项公式的
首先来看看如下的二阶齐次递推公式
f(n) = af(n-1)+bf(n-2) ------------------------------ (1)
(1)式可通过有名的差错法来求,将f(n)作为a(k),构造
G(x) = ∑f(n)*x^n
展开G(x) = f(0) + f(1)*x + f(2)*x^2 + f(3)*x^3.....
-G(x) = -f(0) - f(1)*x - f(2)*x^2 - f(3)*x^3.....
a*x*G(x) = f(0)*a*x + f(1)*x^2*a + f(3)*x^3*a......
b*x^2*G(x) = f(0)*x^2*b + f(2)*x^3*b..........
3式相加得
( b*x^2 + a*x - 1 )*G(x) = -f(0) + ( f(0)*a - f(1) ) *x
G(x) = (-f(0) + ( f(0)*a - f(1) ) *x) / ( b*x^2 + a*x - 1 )
这里的b*x^2 + a*x - 1 = c(x) 也被称为特征方程,将分母拆分
G(x) = A/1-r1*x + B/1-r2*x,r1,r2为b*x^2 + a*x - 1 = 0 的两根,使用待定系数法可求出A,B
这里就可以利用母函数得
G(x) = A*∑(r1*x)^n + B*∑(r2*x)^n
既得
f(n) = A*r1^n + B*r2^n ----------------------------------------------(2)
似乎是万事大吉了,不过还没有,
当r1 = r2 = r 时
G(x) = A/1-r*x + B/(1-r*x)^2
则得
G(x) = A*∑(r*x)^n + B*∑(n+1)(r*x)^n
f(n) = A*r^n + B*(n+1)r^n ------------------------------------------(3)
(2),(3)即为所求解
其中A =( f(0)*a - f(1) - f(0)*r1) / ( r1 - r2 )
B = ( f(0)*r2 + f(1) - f(0)*a)/ ( r1 - r2 )
本文主要主要关注的是二阶齐次递推公式,而母函数是应用很广的概念,如果有兴趣可进一步参见组合数学相关的教材