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

125 篇文章 7 订阅
30 篇文章 0 订阅

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

 F 0 =0F 1 =1F n =F n1 +F n2   

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

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

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

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 n1 (1+5   12 ) 

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 n1 +a n2   

将其转换为矩阵形式:
(F n+2 F n+1  )=(1,1, 10 )(F n+1 F n  ) 

无所不在的矩阵形式呀,这是矩阵形式的递归版(是不是可以说,递归形式都可转化为 矩阵的连乘版);
(F n+1 F n  )=(1,1, 10 ) n (10 ) 

或者全部使用矩阵形式:
(F n+1 ,F n , F n F n1  )=(1,1, 10 ) n  

求下述矩阵的特征值:
(1,1, 10 ) 

λ(λ1)1=0  ,解得 λ 1 =1+5   2 ,λ 2 =15   2  
求得各自特征值对应的特征向量为:
α   1 =⎛ ⎝ 12 (1+5   )1 ⎞ ⎠ α   2 =⎛ ⎝ 12 (15   )1 ⎞ ⎠  

通过 α   1 ,α   2   [1,0] T   线性表示为:
(10 )=15    α   1 +(15    )α   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    )(15   2 ) n ⎛ ⎝ 15   2 1 ⎞ ⎠ 15    ⎛ ⎝ ⎜ ⎜ ⎜ (1+5   2 ) n+1 (15   2 ) n+1 (1+5   2 ) n (15   2 ) n  ⎞ ⎠ ⎟ ⎟ ⎟   

所以最终:
F n =15    [(1+5   2 ) n (15   2 ) n  ] 

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

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]    
                            # 一模一样,不差分毫
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值