建议学习:> here <
一个线性变换会使一个向量在方向上发生偏移,但是如果能找到变换后方向不会发生偏移的向量,将其当作基向量,就可以快速计算递推式的任意项。
将这种基向量称作特征向量 $ \vec{v} $ ,每次变换后伸长或缩短的倍数称作特征值 $ \lambda $ ,转移矩阵为$ A $,其中 $ A $ 有 $ n $ 列(转移长度为 $ n $)。
于是:
其中 $ \vec{v} $ 取零向量是无意义的。
若要使 $ \vec{v} $ 为非零解,则 $ \det(\lambda I - A) = 0 $ ,即将空间降维。
其中 $ \det(\lambda I - A) = 0 $ 是次数为 $ A $ 的列数的特征多项式 $ f(\lambda) $ 。
根据Cayley-Hamilton定理, $ f(A) = 0 $ ,证明莫得感兴趣的话百度一下。
转移矩阵大概是长这样的:
特征多项式是长这样的:
这个东西的行列式可以手算(判断第一行选哪一个):
设初始项 $ H $,求第 $ m $ 项。
求 $ (A^{m} \times H)_0 $ 。
直接多项式快速幂 + 多项式取模计算出 $ A^m \bmod f(A) $ 。
设之后得到的多项式
最后求
授之以渔不如授之以鱼
1 |
|