RT,主要總結一下矩陣的求法。
首先能用矩陣快速冪優化的遞推類型是f[n]=5f[n-3]+6f[n-2]+2f[n-1]+n^2+n+8之類的
也就是說遞推是線性遞推且f[n-i]前面的系數是常數,可以含有與n有關的多項式,也可以含有常數的這種遞推,下面總結一下矩陣的寫法:
先考慮最簡單的常數,我們其實可以忽略常數,因為頂多在沒有常數的矩陣外面加一行一列就行了
以f[n]=2f[n-1]+6f[n-2]+5f[n-3]+n^2+n為例
先寫迭代的矩陣,一般可以寫成一行,右邊有幾項寫幾項
{f[n-1],f[n-2],f[n-3],n^2,n}
如果這么寫的話,那肯定數字矩陣是5*5的(因為1*5矩陣乘5*x矩陣等於1*5矩陣,那么肯定x=5)
不過發現這樣不行,為什么呢?因為n^2和n不能通過簡單的數字的四則運算得到(n+1)^2和n+1,但我們可以這樣寫
{f[n-1],f[n-2],f[n-3],n^2,n,2n,1,1}
*
2 1 0 0 0 0 0 0
6 0 1 0 0 0 0 0
5 0 0 0 0 0 0 0
1 0 0 1 0 0 0 0
1 0 0 0 1 0 0 0
0 0 0 1 0 1 0 0
0 0 0 1 0 0 1 0
0 0 0 0 1 2 0 1
={f[n],f[n-1],f[n-2],(n+1)^2,n+1,2(n+1),1,1}
怎么想到的呢??從n^2->(n+1)^2和n->n+1入手,(n+1)^2-n^2=2n+1,所以便有了后面的2n項和1項,n+1-n=1,所以便有了后面的1項。(其實多出的2n也要考慮,只不過有了1項,所以就融入在里面了。)
當然以上的不是最簡單的,還可以化簡,不過這是一種構造方法啦= =
——————————————————————————————————————
考慮加上常數8,就輕輕松松寫出:
{f[n-1],f[n-2],f[n-3],n^2,n,2n,1,1,8}
*
2 1 0 0 0 0 0 0 0
6 0 1 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0
1 0 0 1 0 0 0 0 0
1 0 0 0 1 0 0 0 0
0 0 0 1 0 1 0 0 0
0 0 0 1 0 0 1 0 0
0 0 0 0 1 2 0 1 0
0 0 0 0 0 0 0 0 1
={f[n],f[n-1],f[n-2],(n+1)^2,n+1,2(n+1),1,1,8}