求斐波那契数列的通项(线代大作业)

交大版《线性代数》软件应用练习题10

斐波那契数列于1200年左右被发现,在现代物理、准晶体结构、化学等领域都有直接的应用,它把0和1作为初始项$F_0$和$F_1$,以后每一项作为前两项的和,$F_{k+2}=F_{k+1}+F_{k}$,于是得到数列1,1,2,3,5,83,1,21,$\cdots$. 求出斐波那契数列的通项.

既然作业要求是用MATLAB,那就先用一下。但是用计算机程序求通项公式好像不在我们的能力范围内,所以以下内容都是用程序求特定项,再用数学方法求出通项。

这个作业本来就很奇怪,真是让我不知道怎么理解才对。那就这么理解吧。

直接用库函数

注意到,MATLAB本身就提供了fibonacci函数,用来计算斐波那契数列的第n项。

clc 
clear all
X=sprintf("%d",fibonacci(114514));
disp(X);

那还写啥呢?

递推

无解析,因为没有什么必要。

MATLAB

function [Y]=f1bonacci(n)
X=0;
Y=1;
for i=2:n
    t=Y;
    Y=X+Y;
    X=t;
end
end

C++

long long fibonacci(int n)
{
    long long x=0,y=1,tmp;
    for(int i=2;i<=n;i++){
        tmp=y;y=x+y;x=tmp;
    }
    return y;
}

递归

同上

MATLAB

function [Y]=f1bonacci(n)
if(n==1||n==2)
    Y=1;
    return
else
    Y=f1bonacci(n-1)+f1bonacci(n-2);
    return
end
end

C++

long long fibonacci(int n)
{
    if(n==1||n==2) return 1;
    return fibonacci(n-1)+fibonacci(n-2);
}

运用矩阵

不喜欢运用矩阵。根本就是同样的东西,写成矩阵无非是更加装逼罢了。

It is my experience that proofs involving matrices can be shortened by 50% out

if one throws the matrices out.

—— Emil Artin

MATLAB

function [Y]=f1bonacci(n)
    M=[1,1;1,0];
    Init=[1;1];
    Res=(M^(n-2))*Init;
    Y=Res(1);
    return
end

运用高中数学

因为我比较笨(懒),不会用(懒得证)特征根法,所以就写一下等比数列的方法好了。

假设原递推式能变形为$a_{n}+A a_{n-1}=B\left(a_{n-1}+A a_{n-2}\right)$,记为$*$式

于是有$a_{n}=(B-A) a_{n-1}+A B a_{n-2}=a_{n-1}+a_{n-2}$

所以

image-20221224204702725

所以为什么fixit兼容性这么差 这个方程组只能帖图片了

后面的那些公式块也没法换行,太逊了。

解得

$$ A=\frac{-1 \pm \sqrt{5}}{2} $$ 再结合$*$式得 $$ \begin{aligned} a_{n}+A a_{n-1} & =B\left(a_{n-1}+A a_{n-2}\right) \ & =B^{2}\left(a_{n-2}+A a_{n-3}\right) \ & \cdots \ & =B^{n-2}\left(a_{n-(n-2)}+A a_{n-(n-1)}\right) \ & =B^{n-2}\left(a_{2}+A a_{1}\right) \ & =B^{n-2}(1+A) \ & =B^{n-1} \end{aligned} $$ 这样就得到了一个一阶线性递推式。

由于$a_{n}=-A a_{n-1}+B^{n-1}$

再次待定系数,假设$a_{n}+C B^{n}=-A\left(a_{n-1}+C B^{n-1}\right)$

由以上两式可得 $$ a_{n}=-A a_{n-1}-C A B^{n-1}-C B^{n}=-A a_{n-1}+B^{n-1} $$ 即 $$ -C A-C B=1 \Rightarrow C=\frac{-1}{A+B} $$ 代回原式得 $$ \begin{aligned} a_{n}+C B^{n} = & (-A)^{n-1}\left(a_{n-(n-1)}+C B^{n-(n-1)}\right) \ = & (-A)^{n-1}(1+C B) \ a_{n}= & (-A)^{n-1}(1+C B)-C B^{n} \ = & (-A)^{n-1}\left(1-\frac{B}{A+B}\right)+\frac{B^{n}}{A+B} \ = & \frac{(-A)^{n-1} A+B^{n}}{A+B} \ = & \frac{B^{n}-(-A)^{n}}{A+B} \end{aligned} $$ 此时再代入前面得到的A和B的值,即得最终的通项公式: $$ a_{n}=\frac{1}{\sqrt{5}}\left[\left(\frac{1+\sqrt{5}}{2}\right)^{n}-\left(\frac{1-\sqrt{5}}{2}\right)^{n}\right] $$ 所以,在这个问题中,MATLAB到底能帮我什么呢?真是一个值得思考的问题。

0%