零化多项式/特征多项式/最小多项式/常系数线性齐次递推
约定:
(I_n)是(n)阶单位矩阵,即主对角线是(1)的(n)阶矩阵
一个矩阵(A)的(|A|)是(A)的行列式
默认(A)是一个(n imes n)的矩阵
定义
零化多项式:
对于一个矩阵(A),它的一个零化多项式(f(lambda))是满足(f(A)=0)的多项式,定义域包含矩阵
最小多项式:次数最低的零化多项式
特征多项式
对于一个(n)阶的矩阵(A),它的特征多项式
(p(lambda)=|lambda I_n-A|)
(lambda)定义域不止是(R),还可以是矩阵
(p(lambda))是关于(lambda)的一个不超过(n+1)次的多项式
即(p(lambda )=sum_0^{n}a_ix^i)
Cayley-Hamilton定理:矩阵的特征多项式也是它的零化多项式
求解特征多项式
带入(n)个数,求出得(|x I_n-A|),得到(n)个矩阵,通过高斯消元可以(O(n^3))地求出行列式
然后可(O(n^2))拉格朗日插值求出原来的多项式,总复杂度受限于高斯消元,为(O(n^4))
求解最小多项式
构造矩阵序列(a_i=A^i)
求出它的一个线性递推(r_i),即
(egin{aligned} sum_{j=0}^{m} r_j a_{i-j}=sum_{j=0}^{m} r_j A^{i-j}=(sum_{j=0}^m r_{m-j}A^j)cdot A^{i-m}=0end{aligned})
(egin{aligned} herefore sum_{j=0}^m r_{m-j}A^j=0end{aligned})
所以可以由(r_i)翻转得到(f(lambda))
求解(a_i)前(n)项的复杂度受限于矩阵乘法为(O(n^4)),求解递推式的复杂度为(O(n^3))
考虑到实际求解递推式时,随机生成了两个向量(u,v)
实际是计算标量序列({uA^iv})的递推式,所以实际每次求出(uA^i)复杂度应为(O(n^2))
求这个递推式需要用到(a_i)前(2n)项,求解复杂度为(O(n^3))
因此总复杂度为(O(n^3))
(但是如果只是求出来并没有什么用,因为求解方法是随机的,甚至连检查一次保证正确都需要(O(n^2(n+e)))的时间((e)为矩阵非0位置个数))
求解稀疏方程组
设方程系数用矩阵(A)表示,右侧每个方程的常数用向量(b)表示,答案用向量(x)表示,则满足关系式
(Ax=b),即(x=A^{-1}b)
求出({A^ib})线性递推式,反推出(A^{-1}b)即可
反推方法:
带入线性递推的(m)项,则(sum_{i=0}^{m} A^{m-i}bcdot r_i=0)
两边同乘(A^{-1}),得到(A^{-1}bcdot r_m +sum_{i=0}^{m-1}A^{m-i}br_i=0)
求解矩阵(k)次幂
我们要求解(A^k),常规做法是直接用快速幂
设矩阵(A)的一个零化多项式是(f(lambda))
显然,(A^k)可以用一个多项式表示(A^k=sum_0^k w_i A^i)
({w_i})构成了一个(k+1)次多项式(F_k(x))
存在一种合法的表示是(F_k(x)=x^k)
(ecause f(A)=0 herefore forall i, f(A)A^i=0)
也就是相当于我们要求出(x^k)对于(f(x))这个(n+1)多项式取模
显然可以通过类似快速幂的方式倍增求解这个多项式,每次对(f(x))取模复杂度是(O(nlog n))
就能在(O(nlog mlog n))时间得求出(F(x))
最后得到的(F(x))是一个(n)次多项式
那么带入就可以快速求出(A_k)
可以认为这个复杂度是受限于求解(A^0,A^1,cdots,A^{n-1})的(O(n^4))
对于元矩阵(A)为稀疏矩阵的情况,设其包含(e)个非零位置
那么求解(Bcdot A)的过程是(O(ncdot e))的,求解(A_0,A^1,cdots,A^{n-1})的过程,是(O(n^2e))的
求解零化多项式的复杂度也是(O(n^2(n+e)))的,因此总复杂度为(O(n^2(n+e)))
而一般的矩阵快速幂是(O(n^3log k))的,这种方法适用情况非常特殊
另外,对于并不需要知道整个矩阵的答案,并且(A^0,A^1,cdots,A^{n-1})特殊的具体问题,这个方法也十分有效
求解常系数线性齐次递推
问题是要求数列(f_i=sum _{j=1}^{n}a_jcdot f_{i-j})
给出(f_0,f_1,cdots,f_{n-1}),求第(k)项的值
线性递推显然可以用 初始向量列 与 转移矩阵的幂次 的乘积表示,即(f_i=(S cdot A^i)_n),其中(A)为转移矩阵,(S)为初始向量列,我们求的是第(n)项
对于(n=4)的情况,我们的转移矩阵(A)是
1 | 2 | 3 | 4 | |
---|---|---|---|---|
1 | (a_4) | |||
2 | 1 | (a_3) | ||
3 | 1 | (a_2) | ||
4 | 1 | (a_1) |
鉴于它的特殊性,我们可以直接求出它的特征多项式表达式
由(lambda I_n-A=)
1 | 2 | 3 | 4 | |
---|---|---|---|---|
1 | (lambda) | (-a_4) | ||
2 | $-1 $ | (lambda) | (-a_3) | |
3 | (-1) | (lambda) | (-a_2) | |
4 | (-1) | (lambda -a_1) |
带入行列式最暴力的求法
枚举一个排列(p_i),设排列(p)的逆序对为(f(p)),(|A|=sum (-1)^{f(p)} Pi A_{i,p_i})
实际上合法的排列只有(n)个,就是
枚举(p_i=n)
那么(p_j=left{egin{aligned} j && j<i \ n && j=i \ j-1 && j> iend{aligned} ight.)
当(i=n)时,((-1)^{f(p)} Pi A_{i,p_i}=lambda ^n-a_1lambda ^{n-1})
当(i>1)时,
(f(p)=n-i)
(Pi A_{i,p_i}=(-1)^{n-i+1}lambda^icdot a_{n-i+1})
((-1)^{f(p)} Pi A_{i,p_i}=-lambda^i a_{n-i+1})
综上,转移矩阵(A)的特征多项式有简单的表达
(p(lambda) = |lambda I_n-A|=lambda^n-a_1lambda^{n-1} -a_2lambda^{n-2} -cdots -a^n)
假设有(f_0)这一项(不需要知道是多少),那么认为初始向量列为(S=(f_{-(n-1)},f_{-(n-2)},cdots ,f_{0}))
这个问题,我们要求的是(Scdot A^k)的第(n)项,不需要知道整个矩阵
类似求出(A^k)的过程,求出(F_k(x)mod p(lambda))
我们要求解((Scdot A^k)_n=sum_1^{n}[x^i]{F(x)}(Scdot A^i)_n)
而((Scdot A^i)_n=f_i)已知,求出(F(x))后直接带入即可
需要用到多项式取模,求解这个表达式是(O(nlog nlog k))的,求完直接带入即可