c语言斐波那契数列_斐波那契数列:线性代数的优雅解法

3572bba14099b6e3bb7618da837645f7.png

问题提出

求解斐波那契数列的第n项,比如

众所周知,斐波那契数列是数学上非常优美的一个概念,又称黄金分割数列,最早由数学家斐波那契由兔子繁殖的例子引入。从自然界中海螺的螺纹到证券投资中的价格分析,从计算机科学中的最小堆有序树到物理学中氢原子能级,斐波那契数列的身影不可思议地出现在各个学科当中。

简言之,这个数列的特点就是从第3项开始,每一项都是前两项数值之和,即

,如果我们从0、1开始这个序列,写下来就是0,1,1,2,3,5,8,13,...

现在我们希望快速估计这个序列的第n项的值,比如第100项。第100项其实是个非常大的数,笨办法就是不断地递推,从线性代数的视角,我们可以得到一种简洁优美的解法。

表示成线性系统

我们把斐波那契数列的递推形式看作一个线性系统

。其中
是系统上一步的状态,A是一个矩阵,用于对
进行线性变换,变换的结果就是下一步的状态
。由于斐波那契数列利用到了前两步的信息,这里我们也用一个二维向量来同时记录两步的状态,即

构造递推方程:

写成矩阵的形式:

。所要求解的

对角化矩阵A

根据线性代数的知识,我们知道,一个矩阵A在某种条件下可以被对角化,即分解成

的形式。其中,
  • X是由A的特征向量
    为列构成的矩阵
  • 是由A的特征值
    为对角线元素构成的对角矩阵,形如

为什么要对角化?因为对角化后,求A的n次方有非常简洁的形式,即

,方便我们后续求解
。这里,所有的特征向量都保持不变,特征值变成原来的n次方。

为了对角化,我们先要求出A的特征值和特征向量。

求解A的特征值和特征向量

先求特征值

,即求解
,其行列式等于
,可以解出两个特征值

再求解

对应的特征向量
,即解方程
,即
。这里令自由变量
,可以解出

类似地,可以解出

对应的特征向量

目标值估计

此时,回顾我们求解的目标

,其中,

代入原式化简可得

由于

,并且我们要求的是
的第2分量(值为1),所以

每个问题,无论大小,都应该有一种高质量的表述方式,简洁、逻辑清晰、符合直觉。我发现这是一种很好的自我训练。

全手写TeX数学公式真酸爽……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值