Fibonacci全面总结

参考资料https://en.wikipedia.org/wiki/Fibonacci_number#CITEREFBeckGeoghegan2010

在数学上,费波那契数列是以递归的方法来定义:

  • F0=0
  • F1=1
  • Fn=Fn1+Fn2n2

用文字来说,就是费波那契数列由0和1开始,之后的费波那契系数就由之前的两数相加。首几个费波那契系数是:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233……

特别指出:0不是第一项,而是第零项。

源起

根据高德纳(Donald Ervin Knuth)的《计算机程序设计艺术》(The Art of Computer Programming),1150年印度数学家Gopala和金月在研究箱子包装物件长宽刚好为1和2的可行方法数目时,首先描述这个数列。在西方,最先研究这个数列的人是比萨的列奥那多(意大利人斐波那契Leonardo Fibonacci),他描述兔子生长的数目时用上了这数列。

  • 第一个月初有一对刚诞生的兔子
  • 第二个月之后(第三个月初)它们可以生育
  • 每月每对可生育的兔子会诞生下一对新兔子
  • 兔子永不死去

假设在n月有兔子总共a对,n+1月总共有b对。在n+2月必定总共有a+b对:因为在n+2月的时候,前一月(n+1月)的b对兔子可以存留至第n+2月(在当月属于新诞生的兔子尚不能生育)。而新生育出的兔子对数等于所有在n月就已存在的a对

表达式

为求得斐波那契数列的一般表达式,可以借助线性代数的方法。高中的初等数学知识也能求出。

初等代数解法

已知
- a1=1
- a2=1
- an=an1+an2

首先构建等比数列

an+αan1=β(an1+αan2)
化简得
an=(βα)an1+αβan2
比较系数可得:

{βα=1αβ=1

不妨设 β>0,α>0
解得:

α=512β=5+12

所以有 an+αan1=β(an1+αan2) , 即 {an+αan1} 为等比数列。

**求出数列 an+αan1

由以上可得:

an+1+αan=(a2+αa1)βn1=(1+α)βn1=βn

变形得: an+1βn+1+αβanβn=1βbn=anβn

**求数列 bn 进而得到 an

bn+1+αβbn=1β
bn+1+λ=αβ(bn+λ) ,解得 λ=1α+β
故数列 {bn+λ} 为等比数列
bn+λ=(αβ)n1(b1+λ) 。而 b1=a1β=1βbn+λ=(αβ)n1(1β+λ)
又有

α=512β=5+12
bn=anβn
可得 an=55[(1+52)n(152)n]

得出 an 表达式

an=55[(1+52)n(152)n]

**线性代数解法

(Fn+2Fn+1)

(1110)
\cdot
(Fn+1Fn)

(Fn+2Fn+1Fn+1Fn)

(1110)
^{n + 1}

构建一个矩阵方程[编辑]
设Jn为第n个月有生育能力的兔子数量,An为这一月份的兔子数量。

{J_{n+1}\choose A_{n+1}} =

(0111)
\cdot {J_n\choose A_{n}},
上式表达了两个月之间,兔子数目之间的关系。而要求的是,An+1的表达式。

求矩阵的特征值: \lambda [编辑]
行列式:-\lambda(1-\lambda)-1\times1=\lambda^2-\lambda-1

当行列式的值为0,解得 \lambda_1 =\frac{1}{2} (1 + \sqrt{5})或 \lambda_2 =\frac{1}{2} (1 - \sqrt{5})

特征向量[编辑]
将两个特征值代入

(

(0111)
-\lambda \cdot E) \cdot\vec x = 0

求特征向量\vec x得

\vec x_1=

112(1+5)

\vec x_2=

112(15)

分解首向量[编辑]
第一个月的情况是兔子一对,新生0对。

{J_{1}\choose A_{1}} =

(01)

将它分解为用特征向量表示。

(01)
=\frac{1}{\sqrt{5}} \cdot
112(1+5)
-\frac{1}{\sqrt{5}} \cdot
112(15)
(4)
用数学归纳法证明[编辑]

{J_{n+1}\choose A_{n+1}} =

(0111)
\cdot {J_n\choose A_{n}}=\lambda \cdot {J_n\choose A_{n}}
可得到

{J_{n+1}\choose A_{n+1}} =

(0111)
^n \cdot {J_{1}\choose A_{1}} =\lambda^n \cdot {J_{1}\choose A_{1}} (5)
化简矩阵方程[编辑]
将(4) 代入 (5)

{J_{n+1}\choose A_{n+1}} = \lambda^n \cdot \left[\frac{1}{\sqrt{5}} \cdot

112(1+5)
-\frac{1}{\sqrt{5}} \cdot
112(15)
\right]
根据3

{J_{n+1}\choose A_{n+1}} = \frac{1}{\sqrt{5}} \cdot \lambda_1^n \cdot

112(1+5)
- \frac{1}{\sqrt{5}} \cdot \lambda_2^n\cdot
112(15)

求A的表达式[编辑]
现在在6的基础上,可以很快求出An+1的表达式,将两个特征值代入6中

A_{n+1}=\frac{1}{\sqrt{5}} \cdot \lambda_1^{n+1} - \frac{1}{\sqrt{5}} \cdot \lambda_2^{n+1}
A_{n+1}=\frac{1}{\sqrt{5}} \cdot (\lambda_1^{n+1} - \lambda_2^{n+1})
A_{n+1}=\frac{1}{\sqrt{5}} \cdot \left[\frac{1}{2} \left(1 + \sqrt{5}\right)\right]^{n+1} - \left[\frac{1}{2} (1 - \sqrt{5})\right]^{n+1}(7)
(7)即为An+1的表达式

组合数解法[编辑]
F_n=\sum_{i=0}^{\infty} \binom {n-i}{i}[1]

F_{n-1}+F_n=\sum_{i=0}^{\infty} \binom {n-1-i}{i}+\sum_{i=0}^{\infty} \binom {n-i}{i}=1+\sum_{i=1}^{\infty} \binom {n-i}{i-1}+\sum_{i=1}^{\infty} \binom {n-i}{i}=1+\sum_{i=1}^{\infty} \binom {n+1-i}{i}=\sum_{i=0}^{\infty} \binom {n+1-i}{i}=F_{n+1}
近似值[编辑]
F_n \approx \frac{1}{\sqrt{5}} a^n = \frac{1}{\sqrt{5}} \cdot \left[ \frac{1}{2} \left(1 + \sqrt{5}\right) \right]^n \approx 0.4472135955 \cdot 1.618033988745^n
用计算机求解[编辑]
可通过编程观察斐波那契数列。分为两类问题,一种已知数列中的某一项,求序数。第二种是已知序数,求该项的值。

可通过递归递推的算法解决此两个问题。 事实上当n相当巨大的时候,O(n)的递推/递归非常慢……这时候要用到矩阵快速幂这一技巧,可以使递归加速到O(logn)

你可能感兴趣的:(Fibonacci全面总结)