斐波那契数列与黄金分割比以及矩阵形式推导
数学上,斐波那契数列以递归的形式进行定义:
\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]# 已经非常接近了,
矩阵形式推导
还是从定义出发:
\begin{split} &a_0=0\\ &a_1=1\\ &a_n=a_{n-1}+a_{n-2} \end{split}
将其转换为矩阵形式:
\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}
无所不在的矩阵形式呀,这是矩阵形式的递归版(是不是可以说,递归形式都可转化为 矩阵的连乘版);
\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} F_{n+1},&F_n\\ F_n,&F_{n-1} \end{pmatrix}=\begin{pmatrix} 1, &1\\ 1,&0 \end{pmatrix}^n
求下述矩阵的特征值:
\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
求得各自特征值对应的特征向量为:
\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线性表示为:
\begin{pmatrix} 1\\ 0 \end{pmatrix}=\frac1{\sqrt 5}\vec \alpha_1+(-\frac1{\sqrt 5})\vec \alpha_2
所以:
\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=\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] # 一模一样,不差分毫
斐波那契数列与黄金分割比以及矩阵形式推导相关推荐
- 数学之美|斐波那契数列与黄金分割
14天阅读挑战赛 系列文章目录 趣味算法(第二版)读书笔记: day1: 序章|学习的方法和目标. day2:算法之美|打开算法之门与算法复杂性 day3.算法之美|指数型函数对算法的影响实际应用 d ...
- 漫谈斐波那契数列与黄金分割比
(一)奇妙的斐波那契数列: 斐波那契数列的由来是"兔子问题". 从中总结的规律就是: (1)每个月小兔子数 = 上个月的大兔子数: (2)每个月的大兔子数 = 上个月的大兔子数 + ...
- JavaScript递归函数实现斐波那契数列、黄金分割数列,递归定义与用法实例分析,
递归 所递归函数就是在函数体内调用本函数.使用递归函数一定要注意,处理不当就会进入死循环.要避免进入死循环,写递归函数先要写一个结束条件(为了结束循环)递归函数一般比如阶乘问题. 下面的代码就是一个死 ...
- 数学的玄学-斐波那契数列与黄金分割
斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为" ...
- 斐波那契数列与黄金分割比
原文地址:https://blog.csdn.net/g1933375079/article/details/18773641(如有侵权请联系删除) (一)奇妙的斐波那契数列: 斐波那契数列的由来是& ...
- 2013蓝桥杯 黄金分割数 斐波那契数列与黄金分割比例的结合应用+模拟手算
黄金连分数 黄金分割数0.61803... 是个无理数,这个常数十分重要,在许多工程问题中会出现.有时需要把这个数字求得很精确. 对于某些精密工程,常数的精度很重要.也许你听说过哈勃太空望远镜,它首次 ...
- Java实现斐波那契数列与黄金分割比精确位数问题
题目: 打印输出斐波拉契数列的位数,以及对应的黄金分割值的准确位数,例如(11,4),既是利用11位的斐波拉契数列计算得到的黄金分割数可以准确到小数点后四位.设定一个具体的精确度(例如小数点后10位) ...
- 以斐波那契数列实现黄金分割数的验证
几日前,在看明朝那些事儿的时候突然看到书中有提到黄金分割数,于是兴起百度了一下黄金分割数的具体概念,发现了黄金分割数与斐波那契数列之间不可言喻的联系. 黄金分割数相信大家都听说过但是很少去刻意了解.我 ...
- 斐波那契数列(Fibonacci)(黄金分割)
目录: 斐波那契数列(Fibonacci) 斐波那契数列 与 黄金分割 一.斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leona ...
最新文章
- 这些Python常用的工具和学习资源你都知道么?
- iOS推送兼容iOS7
- linux shell map dict 字典数组
- Android驱动开发之Hello实例
- python tkinter怎么读_Tkinter GUI与阅读系列
- Java面向对象---重写(Override)与重载(Overload)
- 条令考试小程序辅助器_计算机一级考试干货!
- 仿英雄联盟比赛直播网页模板
- Linux: 举例说明Linux diff 命令
- SSM运行异常 org.springframework.beans.factory.UnsatisfiedDependencyException
- 一道abc+cba=1333的问题
- 备战2019年数据库系统工程师从什么时候开始合适?
- mac的win10蓝牙鼠标问题
- Python 分位数回归
- Canonical标签有没有必要使用呢? Canonical标签作用是什么
- java俄罗斯方块七中图形类_shell脚本编写的俄罗斯方块游戏代码
- 成都二手房长啥样 —— 基于链家数据
- 时间复杂度分析:递归算法
- Python|简易银行ATM程序制作
- css+html+js 仿制一个天猫的登陆界面
热门文章
- Doris之Routine Load
- android view 平滑,Android移动view动画问题(让移动更平滑)
- 找出满足要求的三位数
- LeetCode 338. 比特位计数(动态规划)
- 关于残差网络(ResNet)解析
- 一个方法解决Warning: Permanently added 'gitee.com,180.97.125.228' (ECDSA) to the list of
- 常用animation动画
- 安装配置mariadb-10.1.19
- 使用Redis实现高并发分布式序列号生成服务
- 空间闹钟-v1.6更新!