递归关系 - 特征方程的等根

时间:2015-04-18 10:24:31

标签: recurrence

我有以下问题:

  

解决以下重现关系,简化您的最终答案   使用'O'符号。

     

f(0)= 3

     

f(1)= 12

     

F(N)= 1207(N-1)-9f第(n-2)

我们知道这是一个齐次的二阶关系,所以我们写出特征方程:a^2-6a+9=0,解是a1,2=3

问题是当我更换这些值时,我得到:

f(n)=c1*3^n+c2*3^n

并使用我有的2个初始关系:

f(0)=c1+c2=3
f(1)=3(c1+c2)=12

这使我没有c1c2这样的值,这两个关系都是正确的。

我做错了吗?当涉及到特征方程的相同根时,它应该解决的方式是不同的吗?

1 个答案:

答案 0 :(得分:0)

您无法通过这种方式解决问题,因为矩阵A不可对角化。 但是,如果您使用Jordan的正常形式,那么这就是您所获得的:

f(n) = 3^{n-1}(3n + 9)

Jordan矩阵和基础(维基百科+ Octave的符号)是:

J := [3,1;0,3]
P := [3,4;1,1]

这样PJP ^ { - 1} = A,其中

A := [6,-9;1,0]

是你的递归矩阵。此外,Jordan矩阵几乎与用于计算能力的对角矩阵一样好:

J^n = 3^(n-1) * [3,n;0,3].

然后再次发生:

[f(n+1); f(n)] = A^n [12,3] = PJ^nP^-1[12,3] = (<whatever>, 3^(n-1)*(3n+9)).

这里有一个快速的数字检查(Scala,但你可以随心所欲,Octave或我喜欢的任何东西):

scala> def f(n: Int): Int = { if (n == 0) 3 else if (n == 1) 12 else (6 * f(n-1) - 9 * f(n-2)) }
f: (n: Int)Int

scala> for (i <- 0 until 20) println(f(i))
3
12
45
162
567
1944
6561
21870
72171
236196
767637
2480058
7971615
25509168
81310473
258280326
817887699
                                                                    ^

scala> def explicit(n: Int): Int = (Math.pow(3, n -1) * (3 * n + 9)).toInt
explicit: (n: Int)Int

scala> for (i <- 0 until 20) println(explicit(i))
3
12
45
162
567
1944
6561
21870
72171
236196
767637
2480058
7971615
25509168
81310473
258280326
817887699