求Fibonacci数列通项公式

0. Intro

[f_n=egin{cases} 0 & (n=0) \ 1 & (n=1) \ f_{n-1}+f_{n-2} & (n>1) end{cases}]

这个就是众所周知的Fibonacci数列

用生成函数可以求出该数列的通项公式

1. 生成函数

生成函数分为普通型生成函数(OGF)和指数型生成函数(EGF),后面默认提到生成函数都是OGF

若有一数列 (A: a_0,a_1,a_2,a_3,cdots) ,则 (A) 的生成函数为

[F(x)=sum_{i=0}^{infty}a_ix^i=a_0+a_1x+a_2x^2+cdots ]

为了熟悉生成函数,先来看一个很基础的例子:

已知数列 (f_n=1) ,求 (f) 的生成函数 (F(x))

直接代到定义式里就好了

[F(x)=sum_{i=0}^{infty}f_ix^i=sum_{i=0}^{infty}x^i ]

发现这里其实就是一个等比数列求和

[F(x)=lim_{i ightarrow infty}dfrac{1-x^i}{1-x} ]

研究生成函数时我们都假设级数收敛
如果你不知道级数收敛是什么意思 只需要知道生成函数中的 (x) 没有实际意义 所以我们可以任意取值 所以不妨设 (0<x<1)
那么当 (i) 趋向于无穷大时,(x^i) 显然趋于 (0)
于是就得到了一个很简单的式子

[F(x)=dfrac1{1-x} ]

同理可以得到三个关于等比数列的生成函数的结论:

数列 (1,q,q^2,q^3,cdots) (下标从0开始,下同)的生成函数是 (F_1(x)=dfrac1{1-qx})
数列 (0,1,q,q^2,q^3,cdots) 的生成函数是 (F_2(x)=dfrac x{1-qx})
数列 (q,q^2,q^3,q^4,cdots) 的生成函数是 (F_3(x)=dfrac q{1-qx}=-dfrac1{x-frac1q})

2. Fibonacci数列通项公式

[f_n=egin{cases} 1 & (n=0) \ 1 & (n=1) \ f_{n-1}+f_{n-2} & (n>1) end{cases}]

注意这里的 (f_0=f_1=1) ,和开头的那个不一样,因为这样设推起来更方便

(f_n) 的生成函数为 (F(x)) ,那么我们肯定首先要把 (F(x)) 求出来

[egin{matrix} x^2F(x) &=& & & & & f_0 x^2 & + & f_1 x^3 & + &cdots & (1)\ xF(x) &=& & & f_0 x & + & f_1 x^2 & + & f_2 x^3 & + &cdots & (2)\ F(x) &=& f_0 & + & f_1 x & + & f_2 x^2 & + & f_3 x^3 & + &cdots & (3)\ end{matrix}]

((1)+(2)-(3))((x^2+x-1)F(x)=-1)
所以 (F(x)=dfrac{1}{1-x-x^2})

然而我们并不能由此直接看出 (f) 的通项公式

数列 (1,q,q^2,q^3,cdots) (下标从0开始,下同)的生成函数是 (F_1(x)=dfrac1{1-qx})
数列 (0,1,q,q^2,q^3,cdots) 的生成函数是 (F_2(x)=dfrac x{1-qx})
数列 (q,q^2,q^3,q^4,cdots) 的生成函数是 (F_3(x)=dfrac q{1-qx}=-dfrac1{x-frac1q})

要从生成函数反推出原数列 我们只知道这三个相关的结论
那么我们以这三个结论为目标试着做一些代数变形

[F(x)=dfrac1{1-x-x^2} ]

分母显然要降次

设方程 (1-x-x^2=0) 的两根为 (x_1=dfrac{-1+sqrt5}2,x_2=dfrac{-1-sqrt5}2) ,则 (1-x-x^2=-(x-x_1)(x-x_2))

[F(x)=-dfrac1{(x-x_1)(x-x_2)} ]

(dfrac1{x-x_1}-dfrac1{x-x_2}=dfrac{(x-x_2)-(x-x_1)}{(x-x_1)(x-x_2)}=dfrac{x_1-x_2}{(x-x_1)(x-x_2)})

所以 (F(x)=-dfrac1{x_1-x_2}cdotleft(dfrac1{x-x_1}-dfrac1{x-x_2} ight))

其中含 (x) 的部分和 (F_3(x)) 很接近了

先把最前面的负号乘进去

[F(x)=dfrac1{x_1-x_2}cdotleft[-dfrac1{x-x_1}-left(-dfrac1{x-x_2} ight) ight] ]

易知 (x_1x_2=-1) ,所以 (x_2=-dfrac1{x_1},x_1=-dfrac1{x_2})

[F(x)=dfrac1{x_1-x_2}cdotleft[-dfrac1{x-frac1{-x_2}}-left(-dfrac1{x-frac1{-x_1}} ight) ight] ]

由结论三可知,对于数列 (a_n=(-x_1)^{n+1}) ,它的生成函数是 (G(x)=-dfrac1{x-frac1{-x_1}})
对于数列 (b_n=(-x_2)^{n+1}) ,它的生成函数是 (H(x)=-dfrac1{x-frac1{-x_2}})

[F(x)=dfrac{H(x)-G(x)}{x_1-x_2} ]

这足以说明 (f_n=dfrac{b_n-a_n}{x_1-x_2}) (请读者自行证明)

所以 (f_n=dfrac{(-x_2)^{n+1}-(-x_1)^{n+1}}{x_1-x_2})

(x_1=dfrac{-1+sqrt5}2,x_2=dfrac{-1-sqrt5}2) 代入

[f_n=dfrac{left(frac{1+sqrt5}2 ight)^{n+1}-left(frac{1-sqrt5}2 ight)^{n+1}}{sqrt5} ]

这样就得到了通项公式

而如果是开头那个版本的斐波拉契数列:

[f_n=egin{cases} 0 & (n=0) \ 1 & (n=1) \ f_{n-1}+f_{n-2} & (n>1) end{cases}]

它的通项公式就是

[f_n=dfrac{left(frac{1+sqrt5}2 ight)^n-left(frac{1-sqrt5}2 ight)^n}{sqrt5} ]

3. 总结

(与前面的内容可能有些出入)

数列 (a_0,a_1,a_2,a_3,cdots) 的普通型生成函数(OGF)(以下称为生成函数)为

[F(x)=sum_{i=0}^{infty}a_ix^i=a_0+a_1x+a_2x^2+cdots ]

首项为 (a) ,公比为 (q) 的等比数列(即 (a,qa,q^2a,q^3a,cdots) )的生成函数为

[F(x)=dfrac{a}{1-qx} ]

(a=q) 时可知数列 (q,q^2,q^3,cdots) 的生成函数为

[F(x)=-dfrac1{x-frac1q} ]

这个结论可以用来推导斐波拉契数列的通项公式

斐波拉契数列的递推式:

[f_n=egin{cases} 0 & (n=0) \ 1 & (n=1) \ f_{n-1}+f_{n-2} & (n>1) end{cases}]

(也有 (f_0=f_1=1) 的版本,不唯一)

斐波拉契数列的生成函数(这里 (f_0=f_1=1) ):

[F(x)=dfrac1{1-x-x^2}=dfrac1{sqrt5}left(-dfrac1{x-frac{-1+sqrt5}2}+dfrac1{x-frac{-1-sqrt5}2} ight) ]

斐波拉契数列的通项公式(这里 (f_0=0,f_1=1)

[f_n=dfrac1{sqrt5}left[left(frac{1+sqrt5}2 ight)^n-left(frac{1-sqrt5}2 ight)^n ight] ]

原文地址:https://www.cnblogs.com/REKonib/p/14208811.html