问题提出
求解斐波那契数列的第n项,比如
。
众所周知,斐波那契数列是数学上非常优美的一个概念,又称黄金分割数列,最早由数学家斐波那契由兔子繁殖的例子引入。从自然界中海螺的螺纹到证券投资中的价格分析,从计算机科学中的最小堆有序树到物理学中氢原子能级,斐波那契数列的身影不可思议地出现在各个学科当中。
简言之,这个数列的特点就是从第3项开始,每一项都是前两项数值之和,即
,如果我们从0、1开始这个序列,写下来就是0,1,1,2,3,5,8,13,...
现在我们希望快速估计这个序列的第n项的值,比如第100项。第100项其实是个非常大的数,笨办法就是不断地递推,从线性代数的视角,我们可以得到一种简洁优美的解法。
表示成线性系统
我们把斐波那契数列的递推形式看作一个线性系统
。其中
是系统上一步的状态,A是一个矩阵,用于对
进行线性变换,变换的结果就是下一步的状态
。由于斐波那契数列利用到了前两步的信息,这里我们也用一个二维向量来同时记录两步的状态,即
。
构造递推方程:
写成矩阵的形式:
。所要求解的
。
对角化矩阵A
根据线性代数的知识,我们知道,一个矩阵A在某种条件下可以被对角化,即分解成
的形式。其中,
- X是由A的特征向量
为列构成的矩阵
-
是由A的特征值为对角线元素构成的对角矩阵,形如
为什么要对角化?因为对角化后,求A的n次方有非常简洁的形式,即
为了对角化,我们先要求出A的特征值和特征向量。
求解A的特征值和特征向量
先求特征值
,即求解
。
,其行列式等于
,可以解出两个特征值
。
再求解
对应的特征向量
,即解方程
,即
。这里令自由变量
,可以解出
。
类似地,可以解出
对应的特征向量
。
目标值估计
此时,回顾我们求解的目标
,其中,
代入原式化简可得
。
由于
,并且我们要求的是
和
的第2分量(值为1),所以
。
每个问题,无论大小,都应该有一种高质量的表述方式,简洁、逻辑清晰、符合直觉。我发现这是一种很好的自我训练。
全手写TeX数学公式真酸爽……