数学上,斐波那契数列以递归的形式进行定义:

 F 0 =0F 1 =1F n =F n−1 +F n−2   

\begin{split} &F_0=0\\ &F_1=1\\ &F_n=F_{n-1}+F_{n-2} \end{split}

注意,递归的形式实现较为简单明了,当然在编程实践时,并不推荐递归的实现方式,因为存在大量的重复计算,斐波那契的优化实现不是本文的重点,如有兴趣,请参阅 每周一刷——从斐波那契数列到动态规划,本文重点探讨菲波那切数列与黄金分割比的关系。

维基百科中说菲波那切数列又叫黄金分割数列,这无疑是在告诉我们我们可以通过黄金分割的方式(5  √ −12  \frac{\sqrt{5}-1}2)生成出来一个菲波那切数列。

下面我们简单验证我们的判断:

def fib(n):return n if n <= 1 else fib(n-1)+fib(n-2)
N = 20
print([fib(n) for n in range(N)])[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181]

所谓黄金分割比,一种猜想:F n =F n−1 (1+5  √ −12 ) F_n=F_{n-1}(1+\frac{\sqrt 5-1}2):

int(55*(1+.618)+.5) == 89
int(2584*(1+.618)+.5) == 4181

indeed,诚哉斯言。

我们接着做如下的仿真:

def gold_fib(n):return n if n <=2 else int(gold_fib(n-1)*(1+.618))
print([gold_fib(n) for n in range(N)])[0, 1, 2, 3, 4, 6, 9, 14, 22, 35, 56, 90, 145, 234, 378, 611, 988, 1598, 2585, 4182]# 已经非常接近了,

矩阵形式推导

还是从定义出发:

 a 0 =0a 1 =1a n =a n−1 +a n−2   

\begin{split} &a_0=0\\ &a_1=1\\ &a_n=a_{n-1}+a_{n-2} \end{split}
将其转换为矩阵形式:

(F n+2 F n+1  )=(1,1, 10 )⋅(F n+1 F n  ) 

\begin{pmatrix} F_{n+2}\\ F_{n+1} \end{pmatrix}=\begin{pmatrix} 1,&1\\ 1,&0 \end{pmatrix}\cdot \begin{pmatrix} F_{n+1}\\ F_{n} \end{pmatrix}
无所不在的矩阵形式呀,这是矩阵形式的递归版(是不是可以说,递归形式都可转化为 矩阵的连乘版);

(F n+1 F n  )=(1,1, 10 ) n (10 ) 

\begin{pmatrix} F_{n+1}\\ F_{n} \end{pmatrix}=\begin{pmatrix} 1,&1\\ 1,&0 \end{pmatrix}^{n}\begin{pmatrix} 1\\ 0 \end{pmatrix}
或者全部使用矩阵形式:

(F n+1 ,F n , F n F n−1  )=(1,1, 10 ) n  

\begin{pmatrix} F_{n+1},&F_n\\ F_n,&F_{n-1} \end{pmatrix}=\begin{pmatrix} 1, &1\\ 1,&0 \end{pmatrix}^n
求下述矩阵的特征值:

(1,1, 10 ) 

\begin{pmatrix} 1, &1 \\ 1,&0 \end{pmatrix}
λ(λ−1)−1=0 \lambda (\lambda -1)-1=0,解得 λ 1 =1+5  √ 2 ,λ 2 =1−5  √ 2  \lambda_1 =\frac{1+\sqrt 5}2,\lambda_2=\frac{1-\sqrt 5}2
求得各自特征值对应的特征向量为:

α ⃗  1 =⎛ ⎝ 12 (1+5  √ )1 ⎞ ⎠ α ⃗  2 =⎛ ⎝ 12 (1−5  √ )1 ⎞ ⎠  

\vec \alpha_1=\begin{pmatrix} \frac12(1+\sqrt 5)\\ 1 \end{pmatrix}\\ \vec \alpha_2=\begin{pmatrix} \frac12(1-\sqrt 5)\\ 1 \end{pmatrix}
通过 α ⃗  1 ,α ⃗  2  \vec \alpha_1, \vec \alpha_2对 [1,0] T  [1, 0]^T线性表示为:

(10 )=15  √  α ⃗  1 +(−15  √  )α ⃗  2  

\begin{pmatrix} 1\\ 0 \end{pmatrix}=\frac1{\sqrt 5}\vec \alpha_1+(-\frac1{\sqrt 5})\vec \alpha_2
所以:

(F n+1 F n  )====== (1,1, 10 ) n (10 )(1,1, 10 ) n (a 1 α ⃗  1 +a 2 α ⃗  2 )a 1 (1,1, 10 ) n α ⃗  1 +a 2 (1,1, 10 ) n α ⃗  2 a 1 λ n 1 α ⃗  1 +a 2 λ n 2 α ⃗  2 15  √  (1+5  √ 2 ) n ⎛ ⎝ 1+5  √ 2 1 ⎞ ⎠ +(−15  √  )(1−5  √ 2 ) n ⎛ ⎝ 1−5  √ 2 1 ⎞ ⎠ 15  √  ⎛ ⎝ ⎜ ⎜ ⎜ (1+5  √ 2 ) n+1 −(1−5  √ 2 ) n+1 (1+5  √ 2 ) n −(1−5  √ 2 ) n  ⎞ ⎠ ⎟ ⎟ ⎟   

\begin{split} \begin{pmatrix} F_{n+1}\\ F_n \end{pmatrix}=& \begin{pmatrix} 1,&1\\ 1,&0 \end{pmatrix}^n \begin{pmatrix} 1\\ 0 \end{pmatrix}\\ =&\begin{pmatrix} 1,&1\\ 1,&0 \end{pmatrix}^n(a_1\vec \alpha_1+a_2\vec \alpha_2)\\ =&a_1\begin{pmatrix} 1,&1\\ 1,&0 \end{pmatrix}^n\vec \alpha_1+a_2\begin{pmatrix} 1,&1\\ 1,&0 \end{pmatrix}^n\vec \alpha_2\\ =&a_1\lambda_1^n\vec \alpha_1+a_2\lambda_2^n\vec \alpha_2\\ =&\frac1{\sqrt5}(\frac{1+\sqrt5}2)^n\begin{pmatrix} \frac{1+\sqrt5}2\\ 1 \end{pmatrix}+(-\frac1{\sqrt 5})(\frac{1-\sqrt 5}2)^n\begin{pmatrix} \frac{1-\sqrt5}2\\ 1 \end{pmatrix}\\ =&\frac1{\sqrt 5}\begin{pmatrix} (\frac{1+\sqrt 5}2)^{n+1}-(\frac{1-\sqrt 5}2)^{n+1}\\ (\frac{1+\sqrt 5}2)^{n}-(\frac{1-\sqrt 5}2)^{n} \end{pmatrix} \end{split}
所以最终:

F n =15  √  [(1+5  √ 2 ) n −(1−5  √ 2 ) n  ] 

F_n=\frac1{\sqrt 5}\begin{bmatrix}(\frac{1+\sqrt5}2)^n-(\frac{1-\sqrt5}2)^n\end{bmatrix}

通过初等代数方法,我们也可得出此解析解的形式,具体请参考 斐波那契数列;

def matrix_fib(n):return int(1/sqrt(5)*(((1+sqrt(5))/2)**n-((1-sqrt(5))/2)**n))print([matrix_fib(n) for n in range(N)])[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181]    # 一模一样,不差分毫

斐波那契数列与黄金分割比以及矩阵形式推导相关推荐

  1. 数学之美|斐波那契数列与黄金分割

    14天阅读挑战赛 系列文章目录 趣味算法(第二版)读书笔记: day1: 序章|学习的方法和目标. day2:算法之美|打开算法之门与算法复杂性 day3.算法之美|指数型函数对算法的影响实际应用 d ...

  2. 漫谈斐波那契数列与黄金分割比

    (一)奇妙的斐波那契数列: 斐波那契数列的由来是"兔子问题". 从中总结的规律就是: (1)每个月小兔子数 = 上个月的大兔子数: (2)每个月的大兔子数 = 上个月的大兔子数 + ...

  3. JavaScript递归函数实现斐波那契数列、黄金分割数列,递归定义与用法实例分析,

    递归 所递归函数就是在函数体内调用本函数.使用递归函数一定要注意,处理不当就会进入死循环.要避免进入死循环,写递归函数先要写一个结束条件(为了结束循环)递归函数一般比如阶乘问题. 下面的代码就是一个死 ...

  4. 数学的玄学-斐波那契数列与黄金分割

    斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为" ...

  5. 斐波那契数列与黄金分割比

    原文地址:https://blog.csdn.net/g1933375079/article/details/18773641(如有侵权请联系删除) (一)奇妙的斐波那契数列: 斐波那契数列的由来是& ...

  6. 2013蓝桥杯 黄金分割数 斐波那契数列与黄金分割比例的结合应用+模拟手算

    黄金连分数 黄金分割数0.61803... 是个无理数,这个常数十分重要,在许多工程问题中会出现.有时需要把这个数字求得很精确. 对于某些精密工程,常数的精度很重要.也许你听说过哈勃太空望远镜,它首次 ...

  7. Java实现斐波那契数列与黄金分割比精确位数问题

    题目: 打印输出斐波拉契数列的位数,以及对应的黄金分割值的准确位数,例如(11,4),既是利用11位的斐波拉契数列计算得到的黄金分割数可以准确到小数点后四位.设定一个具体的精确度(例如小数点后10位) ...

  8. 以斐波那契数列实现黄金分割数的验证

    几日前,在看明朝那些事儿的时候突然看到书中有提到黄金分割数,于是兴起百度了一下黄金分割数的具体概念,发现了黄金分割数与斐波那契数列之间不可言喻的联系. 黄金分割数相信大家都听说过但是很少去刻意了解.我 ...

  9. 斐波那契数列(Fibonacci)(黄金分割)

    目录: 斐波那契数列(Fibonacci) 斐波那契数列 与 黄金分割 一.斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leona ...

最新文章

  1. 这些Python常用的工具和学习资源你都知道么?
  2. iOS推送兼容iOS7
  3. linux shell map dict 字典数组
  4. Android驱动开发之Hello实例
  5. python tkinter怎么读_Tkinter GUI与阅读系列
  6. Java面向对象---重写(Override)与重载(Overload)
  7. 条令考试小程序辅助器_计算机一级考试干货!
  8. 仿英雄联盟比赛直播网页模板
  9. Linux: 举例说明Linux diff 命令
  10. SSM运行异常 org.springframework.beans.factory.UnsatisfiedDependencyException
  11. 一道abc+cba=1333的问题
  12. 备战2019年数据库系统工程师从什么时候开始合适?
  13. mac的win10蓝牙鼠标问题
  14. Python 分位数回归
  15. Canonical标签有没有必要使用呢? Canonical标签作用是什么
  16. java俄罗斯方块七中图形类_shell脚本编写的俄罗斯方块游戏代码
  17. 成都二手房长啥样 —— 基于链家数据
  18. 时间复杂度分析:递归算法
  19. Python|简易银行ATM程序制作
  20. css+html+js 仿制一个天猫的登陆界面

热门文章

  1. Doris之Routine Load
  2. android view 平滑,Android移动view动画问题(让移动更平滑)
  3. 找出满足要求的三位数
  4. LeetCode 338. 比特位计数(动态规划)
  5. 关于残差网络(ResNet)解析
  6. 一个方法解决Warning: Permanently added 'gitee.com,180.97.125.228' (ECDSA) to the list of
  7. 常用animation动画
  8. 安装配置mariadb-10.1.19
  9. 使用Redis实现高并发分布式序列号生成服务
  10. 空间闹钟-v1.6更新!