参考资料https://en.wikipedia.org/wiki/Fibonacci_number#CITEREFBeckGeoghegan2010
在数学上,费波那契数列是以递归的方法来定义:
用文字来说,就是费波那契数列由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=an−1+an−2
首先构建等比数列
设 an+αan−1=β(an−1+αan−2)
化简得
an=(β−α)an−1+αβan−2
比较系数可得:
所以有 an+αan−1=β(an−1+αan−2) , 即 {an+αan−1} 为等比数列。
**求出数列 an+αan−1
由以上可得:
变形得: an+1βn+1+αβanβn=1β。令bn=anβn
**求数列 bn 进而得到 an
bn+1+αβbn=1β
设 bn+1+λ=−αβ(bn+λ) ,解得 λ=−1α+β 。
故数列 {bn+λ} 为等比数列
即 bn+λ=(−αβ)n−1(b1+λ) 。而 b1=a1β=1β,故有bn+λ=(−αβ)n−1(1β+λ)
又有
得出 an 表达式
an=5√5⋅[(1+5√2)n−(1−5√2)n]
**线性代数解法
构建一个矩阵方程[编辑]
设Jn为第n个月有生育能力的兔子数量,An为这一月份的兔子数量。
{J_{n+1}\choose A_{n+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})
特征向量[编辑]
将两个特征值代入
(
求特征向量\vec x得
\vec x_1=
\vec x_2=
分解首向量[编辑]
第一个月的情况是兔子一对,新生0对。
{J_{1}\choose A_{1}} =
{J_{n+1}\choose A_{n+1}} =
{J_{n+1}\choose A_{n+1}} =
{J_{n+1}\choose A_{n+1}} = \lambda^n \cdot \left[\frac{1}{\sqrt{5}} \cdot
{J_{n+1}\choose A_{n+1}} = \frac{1}{\sqrt{5}} \cdot \lambda_1^n \cdot
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)