zoukankan      html  css  js  c++  java
  • 求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] ]

  • 相关阅读:
    swift锁屏播放,音乐进度更新,专辑,歌手名显示
    swift Dictionary 字典
    Swift中的集合类型
    Swift String 一些常用方法
    Swift自定义Class实现Hashable
    二元最近的共同祖先问题(O(n) time 而且,只有一次遍历,O(1) Space (它不考虑函数调用栈空间))
    BZOJ1579 USACO 2009 Feb Gold 3.Revamping Trails Solution
    [DEEP LEARNING An MIT Press book in preparation]Linear algebra
    POJ--2391--Ombrophobic Bovines【分割点+Floyd+Dinic优化+二分法答案】最大网络流量
    c#-RTF文本编辑器
  • 原文地址:https://www.cnblogs.com/REKonib/p/14208811.html
Copyright © 2011-2022 走看看