n阶常系数线性递推方程的矩阵乘方解法

Posted on 2008-02-04 14:41  oyy  阅读(1070)  评论(0编辑  收藏  举报
 

n阶常系数线性递推方程的矩阵乘方解法

    大家都知道fibonacci数列可以用矩阵  1 1   进行乘方以达到O(nlogn)的时间内求

                                       1 0

数列第n项。下面我们来考虑能不能将它推广到所有n阶常系数线性递推方程的求解。

 

我们设递推方程f(n)=a1*f(n-1)+a2*f(n-2)……+ak*f(n-k),其中ai(1<=i<=k)为常

数。在结果矩阵中,我们只关心第一行,则设结果矩阵A(n)

A(n)=     f(n),f(n-1)……,f(n-k+1)    A(n-1)=    f(n-1),f(n-2)……,f(n-k)

          ………………………                     ………………………

          ………………                           ………………

          ………                                 ………

我们要求的递推矩阵G需要满足A(n)=A(n-1)*G

 

    下面我们来观察我们来观察矩阵相乘的关系式A(n)[i,j]+=A(n-1)[i,k]*G[k,j];如果要确定A(n)[1,1]的位置是f(n),我们发现,A(n)[1,1]位置的值仅与 A(n-1)[1,k](即A(n-1)的一行)和G[k,1](即G的第一列)有关,就是对应位置乘积之和。这与我们上边的那条递推方程刚好有共通之处!就是对应位置成绩之和!所以G的第一列我们可以确定为

G=    a1,……

      a2,……

      ……

      ak,……

 

    同样地,G后边的数也应该满足对应位置成绩之和规则。由于A(n)第一行之后的位置我们所需要的仅是前一个位置的A(n-1),所以我们只要在G中相应的位置设置1,其余位置设0就行了。这样我们就构造出递推矩阵:

G=    a1,  1,  0,  0……,  0

      a2,  0,  1,  0……,  0

      a3,  0,  0,  1……,  0

      ……

      ak-1,0,  0,  0……,  1

      ak,  0,  0,  0……,  0

 

     

Copyright © 2024 oyy
Powered by .NET 8.0 on Kubernetes