常系数齐次线性递推学习小计

常系数齐次线性递推

由于博主水平有限,许多东西并不严谨,在这里主要作一个记录和总结。

问题

  • 给出 g g g,满足当 n > m n>m n>m时: g n = ∑ i = 1 m g n − i a i g_n=\sum_{i=1}^mg_{n-i}a_i gn=i=1mgniai
  • n < = m n<=m n<=m g n = c n g_n=c_n gn=cn

矩阵乘法

  • O ( m 3 l o g   n ) O(m^3log\ n) O(m3log n)
  • 我们考虑转移矩阵 A A A,初始行矩阵 G G G c i c_i ci得到( G i , 1 = c m − i + 1 G_{i,1}=c_{m-i+1} Gi,1=cmi+1),要求的是 A n − 1 G A^{n-1}G An1G的第 m m m行(虽然也有别的矩阵的转移,但是当前的方式可以让我们之后的计算更加方便)。
  • 这个是解决接下来的问题的基本思路,主要是将矩阵在多项式上拓展,我们将引入另一个做法。

特征值和特征多项式

  • 若有常数 λ \lambda λ,向量 v ⃗ \vec{v} v ,满足 λ v ⃗ = A v ⃗ \lambda \vec{v}=A\vec{v} λv =Av ,那么称 λ \lambda λ为矩阵 A A A特征值 v ⃗ \vec{v} v 为矩阵 A A A特征矩阵
  • 秩为k的矩阵有k组线性不相关的特征向量(对于线性代数我并不熟悉,仅仅是在这里做一个记录)。
  • 化一下式子得到: ( λ I − A ) v ⃗ = 0 (\lambda I-A)\vec{v}=0 (λIA)v =0,满足的充要条件为 ∣ ( λ I − A ) v ⃗ ∣ = 0 |(\lambda I-A)\vec{v}|=0 (λIA)v =0(行列式)。
  • ∣ ( λ I − A ) v ⃗ ∣ |(\lambda I-A)\vec{v}| (λIA)v 可以看作一个 m m m次的多项式,我们称这个多项式为特征多项式 f ( x ) f(x) f(x),那么对于所有的特征值 λ 0 \lambda_0 λ0都有 f ( λ 0 ) = 0 f(\lambda_0)=0 f(λ0)=0,那么 f ( x ) = ∏ i ( x − λ i ) f(x)=\prod_i(x-\lambda_i) f(x)=i(xλi)

Cayley-Hamilton定理

  • 矩阵 A A A特征多项式满足 f ( A ) = 0 f(A)=0 f(A)=0

  • 简单证明:

    • 如果 f ( A ) f(A) f(A)乘所有特征向量都为0,因为它们线性不相关(雾),那么 f ( A ) f(A) f(A)乘任意向量都为0,那么 f ( A ) = 0 f(A)=0 f(A)=0
    • f ( A ) ∗ v i ⃗ = ∏ j ! = i ( λ j I − A ) ∗ ( λ i I − A ) ∗ v i f(A)*\vec{v_i}=\prod_{j!=i}(\lambda_jI-A)*(\lambda_iI-A)*v_i f(A)vi =j!=i(λjIA)(λiIA)vi
    • ( λ i I − A ) ∗ v i = 0 (\lambda_iI-A)*v_i=0 (λiIA)vi=0,所以 f ( A ) ∗ v i ⃗ = 0 f(A)*\vec{v_i}=0 f(A)vi =0

求特征多项式

λ I − A = ( λ − a 1 − a 2 ⋯ − a m − 1 − a m − 1 λ ⋯ 0 0 0 − 1 ⋯ 0 0 ⋮ ⋮ ⋱ ⋮ ⋮ 0 0 ⋯ − 1 λ ) \lambda I-A= \left( { \begin{matrix} \lambda-a_1 & -a_2 & \cdots &-a_{m-1} & -a_m \\ -1 & \lambda & \cdots & 0 &0 \\ 0 & -1 &\cdots & 0 & 0\\ \vdots & \vdots & \ddots & \vdots &\vdots \\ 0 & 0 & \cdots & -1 & \lambda \end{matrix} } \right) λIA=λa1100a2λ10am1001am00λ

  • 根据行列式的定义可以得到 f ( λ ) = ∣ λ I − A ∣ = λ m − ∑ i = 1 m a i λ m − i f(\lambda)=|\lambda I-A|=\lambda^m-\sum_{i=1}^ma_i\lambda^{m-i} f(λ)=λIA=λmi=1maiλmi

快速计算 A n − 1 A^{n-1} An1

  • 我们知道特征多项式 f ( x ) f(x) f(x)满足 f ( A ) = 0 f(A)=0 f(A)=0

  • 不妨把 A A A当做 x x x,放到多项式中去考虑(不难证明矩阵也满足多项式结合的性质)

  • 那么 A n − 1 = P ( A ) f ( A ) + R ( A ) A^{n-1}=P(A)f(A)+R(A) An1=P(A)f(A)+R(A),由于 f ( A ) = 0 f(A)=0 f(A)=0,所以我们可以将 A n − 1 A^{n-1} An1当做 R ( A ) R(A) R(A),那么相当于是 A n − 1   m o d   f ( A ) A^{n-1} \ mod \ f(A) An1 mod f(A)

  • 这里我们可以倍增+多项式取模,即从 A k A^k Ak推到 A 2 k A^{2k} A2k A 2 k + 1 A^{2k+1} A2k+1,然后边自乘边做多项式取模即可做到 O ( m   l o g   n   l o g   m ) O(m\ log\ n\ log\ m) O(m log n log m)的时间复杂度。

  • A n − 1 = ∑ i = 0 m − 1 d i A i A^{n-1}=\sum_{i=0}^{m-1}d_iA^i An1=i=0m1diAi

  • A n − 1 G = ∑ i = 0 m − 1 d i A i G A^{n-1}G=\sum_{i=0}^{m-1}d_iA^iG An1G=i=0m1diAiG

  • 只求列矩阵的第 m m m行,易得 A i G A^iG AiG的第 m m m行即为为 g i + 1 g_{i+1} gi+1.

  • A n s = ∑ i = 0 m − 1 d i g i + 1 Ans=\sum_{i=0}^{m-1}d_ig_{i+1} Ans=i=0m1digi+1

特殊情况

  • 如果我们只知道第 0 0 0项,前 m m m项需要推出来,那怎么快速求前 m m m项呢?
  • 可以直接把前m位当做0,最后一位当做1,多做m次上面的快速幂即可。

例题

  • JZOJ6789

猜你喜欢

转载自blog.csdn.net/qq_43649416/article/details/107599563