零化多項式/特征多項式/最小多項式/常系數線性齊次遞推


零化多項式/特征多項式/最小多項式/常系數線性齊次遞推

約定:

\(I_n\)\(n\)階單位矩陣,即主對角線是\(1\)\(n\)階矩陣

一個矩陣\(A\)\(|A|\)\(A\)的行列式

默認\(A\)是一個\(n\times 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\),即

\(\begin{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}=0\end{aligned}\)

\(\begin{aligned} \therefore \sum_{j=0}^m r_{m-j}A^j=0\end{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}b\cdot r_i=0\)

兩邊同乘\(A^{-1}\),得到\(A^{-1}b\cdot 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\)

\(\because f(A)=0 \therefore \forall i, f(A)A^i=0\)

也就是相當於我們要求出\(x^k\)對於\(f(x)\)這個\(n+1\)多項式取模

顯然可以通過類似快速冪的方式倍增求解這個多項式,每次對\(f(x)\)取模復雜度是\(O(n\log n)\)

就能在\(O(n\log m\log n)\)時間得求出\(F(x)\)

最后得到的\(F(x)\)是一個\(n\)次多項式

那么帶入就可以快速求出\(A_k\)

可以認為這個復雜度是受限於求解\(A^0,A^1,\cdots,A^{n-1}\)\(O(n^4)\)

對於元矩陣\(A\)稀疏矩陣的情況,設其包含\(e\)個非零位置

那么求解\(B\cdot A\)的過程是\(O(n\cdot e)\)的,求解\(A_0,A^1,\cdots,A^{n-1}\)的過程,是\(O(n^2e)\)

求解零化多項式的復雜度也是\(O(n^2(n+e))\)的,因此總復雜度為\(O(n^2(n+e))\)

而一般的矩陣快速冪是\(O(n^3\log k)\)的,這種方法適用情況非常特殊

另外,對於並不需要知道整個矩陣的答案,並且\(A^0,A^1,\cdots,A^{n-1}\)特殊的具體問題,這個方法也十分有效

\[\ \]


求解常系數線性齊次遞推

問題是要求數列\(f_i=\sum _{j=1}^{n}a_j\cdot 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\{\begin{aligned} j && j<i \\ n && j=i \\ j-1 && j> i\end{aligned}\right.\)

\(i=n\)時,\((-1)^{f(p)} \Pi A_{i,p_i}=\lambda ^n-a_1\lambda ^{n-1}\)

\(i>1\)時,

\(f(p)=n-i\)

\(\Pi A_{i,p_i}=(-1)^{n-i+1}\lambda^i\cdot 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_1\lambda^{n-1} -a_2\lambda^{n-2} -\cdots -a^n\)

假設有\(f_0\)這一項(不需要知道是多少),那么認為初始向量列為\(S=(f_{-(n-1)},f_{-(n-2)},\cdots ,f_{0})\)

這個問題,我們要求的是\(S\cdot A^k\)的第\(n\)項,不需要知道整個矩陣

類似求出\(A^k\)的過程,求出\(F_k(x)\mod p(\lambda)\)

我們要求解\((S\cdot A^k)_n=\sum_1^{n}[x^i]{F(x)}(S\cdot A^i)_n\)

\((S\cdot A^i)_n=f_i\)已知,求出\(F(x)\)后直接帶入即可

需要用到多項式取模,求解這個表達式是\(O(n\log n\log k)\)的,求完直接帶入即可

用最朴素的\(\text{NTT}\),完全不卡常,甚至過不掉模板題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM