特徵值和特徵向量

Hanghang007發表於2024-04-25

特徵值和特徵向量

定義 \(n\times n\) 的矩陣 \(A\)非零 \(n\times 1\) 的列向量 \(v\),實數 \(\lambda\),若:

\[Av=\lambda v \]

那麼稱 \(v\)\(A\) 的特徵向量,\(\lambda\) 為特徵值。

求解特徵值

將定義式子移項得到:

\[(\lambda E-A)v=0 \]

其中 \(E\) 為單位矩陣,那麼又因為 \(v\) 為非零向量,可以得到 \((\lambda E-A)\) 不滿秩,換句話說也就是:

\[det(\lambda E-A)=0 \]

那麼行列式求值後得到的會是一個 \(n\) 次多項式,對應的 \(n\) 個根即為特徵值,稱這個多項式為矩陣 \(A\) 的特徵多項式。

直接把 \(\lambda\) 看成未知數做多項式操作複雜度為 \(O(n^5)\),或者直接插值能做到 \(O(n^4)\),但是可以做到更好。

定義相似矩陣:

對於可逆 矩陣 \(P\)\(B=PAP^{-1}\) ,則稱 \(B\)\(A\) 的相似矩陣。

定理:相似矩陣的特徵多項式相同

\[\begin{aligned} ans&=|xE-PAP^{-1}|\\ &=|xE(PP^{-1}-PAP^{-1}|\\ &=|PxEP^{-1}-PAP^{-1}|\\ &=|P(xE-A)P^{-1}|\\ &=|P||xE-A||P^{-1}|\\ &=|xE-A| \end{aligned} \]

其實相似矩陣的跡(主對角線上元素之和)以及矩陣的秩和原矩陣相同,但求解特徵多項式只需行列式相同即可。

這啟示我們可以將 \(A\) 利用類似初等行變換的手法去變成一個好算行列式矩陣(例如上三角矩陣) \(B\) 然後再算特徵多項式。

考慮用初等矩陣消元(初等矩陣都可逆)

定義 \(P(j,i(k))\) 表示將 \(E\) 的第 \(i\) 行的 \(k\) 倍加到第 \(j\) 行上。

那麼矩陣 \(P(j,i(k))\) 中只有矩陣主對角線的值為 \(1\)\((i,j)\)\(k\),其他的元素均為 \(0\),即 \(P(j,i(-k))\)

那麼矩陣 \(P(j,i(k))^{-1}\) 中只有矩陣主對角線的值為 \(1\)\((i,j)\)\(-k\),其他的元素均為 \(0\)

假設對矩陣 \(A\) 的第 \(j\) 行加上 \(k\) 倍的第 \(i\) 行。

\[A=P(j,i(k))AP(j,i(-k)) \]

那麼在在行消後,\(j\) 行要減去第 \(i\)\(k\) 倍。

交換兩行的操作也可以用類似的手法得到,如果交換了第 \(i\) 行和第 \(j\) 行,那麼在交換完成後,\(i\) 列和第 \(j\) 列也會交換。

其實也就是對原來高斯消元的每個操作多執行一次共軛操作。

手完幾個矩陣後你會發現大多數時候並不能消成上三角矩陣,退而求其次,你可以消成一個上海森堡矩陣 \(B\),即對於 \(\forall i>j+1,B_{i,j}=0\)

\[\begin{bmatrix} b_{1,1}& b_{1,2}&\cdots & b_{1,n-1}& b_{1,n}\\ b_{2,1}& b_{2,2}&\cdots & b_{2,n-1}&b_{2,n}\\ & b_{3.2},& \cdots & b_{3,n-1}& b_{3,n}\\ & & \cdots & b_{4,n-1}& b_{4,n}\\ & & \ddots & \vdots & \vdots\\ & & & b_{n-1,n} & b_{n,n} \end{bmatrix} \]

那麼現在的問題變成了如何在快速求解上海森堡矩陣的特徵多項式。

性質這麼好,考慮對最後一列拉普拉斯展開行列式

\[\begin{bmatrix} b_{1,1}& b_{1,2}&\cdots & b_{1,n-1}& b_{1,n}\\ b_{2,1}& b_{2,2}&\cdots & b_{2,n-1}&b_{2,n}\\ & b_{3.2},& \cdots & b_{3,n-1}& b_{3,n}\\ & & \cdots & b_{4,n-1}& b_{4,n}\\ & & \ddots & \vdots & \vdots\\ & & & b_{n,n-1} & b_{n,n} \end{bmatrix} \]

假設最後一列選擇的元素為 \(b_{i,n}\),那麼對於所有大於 \(i\) 的行,唯一能選擇的方案為 \(b_{j,j-1}\),那麼對於小於 \(i\) 的行列,又是一個遞迴的子問題 。

\(g_i\) 表示只考慮前 \(i\)\(i\) 列的行列式。

\[g_0=1,g_i=\sum_{k=1}^{i}a_{k,i}g_{k-1}\prod_{j=k+1}^{i}(-a_{k,k-1}) \]

後面要去負號的原因在於每加一個數逆序對個數加一。

\(f_i(x)\) 表示只考慮前 \(i\) 行前 \(i\) 列的特徵多項式。(注意到計算的是 \(det(\lambda E-A)\)),那麼 \(A\) 中的所有數要取反

\[f_i(x)=(x-a_{i,i})f_{i-1}(x)-\sum_{k=1}^{i-1}a_{k,i}f_{k-1}(x)\prod_{j=k+1}^{i}a_{j,j-1} \]

最後一列取值為 \(a_{i,i}\) 時需要特殊判一下,因為貢獻不一樣。

稍微再化簡一下得到:

\[f_i(x)=xf_{i-1}(x)-\sum_{k=1}^{i}a_{k,i}f_{k-1}(x)\prod_{j=k+1}^{i}a_{j,j-1} \]

其實可以做到 \(O(n^2)\),但是沒必要。

P7776 【模板】特徵多項式

那麼在 \(O(n^3)\) 求出了一個矩陣的特徵多項式。

其實算特徵多項式算的是 \(det(\lambda E-A)\),那能否推廣呢?

即能否在 \(O(n^3)\) 計算 \(det(A+Bx)\) 呢?

其實是可以的,首先你注意到。

嘗試用高斯消元 \(B\)\(B\) 最終變成單位矩陣(這裡不需要用那個共軛操作),然後就變成我們會的東西了,但是有可能 \(B\) 不滿秩。

如果當前在第 \(i\) 行找不到主元,將這一行全部乘以 \(x\),那麼最終多項式的係數也會向右平移一個單位,再用前 \(i-1\) 行確定的資訊去消元第 \(i\) 行。

如果還找不到就重新再來一遍,每次乘以 \(x\) 的代價為 \(O(n^2)\) 如果重複了大於 \(n\) 次說明多項式係數全為 \(0\) (向右平移了大於 \(n\) 個單位),那直接退出即可。

那麼用 \(O(n^3)\)\(B\) 消元成了一個只有在主對角線上元素有值且每個值均非 \(0\)。那我們把每一行的係數全部提取出來,設他們的乘積為 \(w\),那麼現在就變成了求 \(det(A+xE)\)

\(A\) 全部取反後就變成了特徵多項式板子題。

唯一要修改的地方就是將 \(f_0(0)\) 的值從 \(1\) 變成 \(w\)

複雜度還是 \(O(n^3)\)

還能擴充套件嗎?比如說求 \(det(A+Bx+Cx^2)\) ?貌似是可以的,但是很複雜,筆者暫未學習。(坑 ,但是插值是一定能做的,複雜度劣一些)

[ABC323G] Inversion of Tree

題目想要區分逆序邊和順序邊,那直接將逆序邊的權值設為 \(x\),順序邊的權值設為 \(1\),放到矩陣樹上的矩陣中,去掉任意一行一列,求 \(det(A+Bx)\) 的每一項係數即可。

口胡的idea

給定一個無向圖,求有多少種方案選擇一些邊使得最終形成恰好 \(k\) 棵樹,即森林大小為 \(k\),對於 \(k=1\sim n\) 分別求解。

\(n\le 500\)

建一個虛點,又恰好 \(k\) 棵等價於所有恰好有 \(k\) 棵樹的根跟虛點連邊。

虛點跟其他每個點連一條權值為 \(x\) 的邊,其他邊正常連 \(1\) 的邊,跑矩陣樹即可。

特徵分解(對角化)

在矩陣快速冪中,計算 \(A^k\),每一次乘法都是 \(O(n^3)\),這不免讓人感到失落。

如果說矩陣是一個對角矩陣(只有主對角線有值的話),那麼乘法的效率會大大提高。

如果能找到一個對角矩陣 \(PBP^{-1}=A\)

那麼

\[\begin{aligned} A^k&=(PBP^{-1})^k\\ &=(PBP^{-1})(PBP^{-1})\cdots (PBP^{-1})\\ &=PB(P^{-1}P)B(P^{-1}P)\cdots BP^{-1}\\ &=PB^kP^{-1} \end{aligned} \]

\(PBP^{-1}=A\) 那麼可以得到 \(AP=PB\)

\(B\) 主對對角線上的元素分別為 \(\lambda_1,\lambda_2,\cdots,\lambda_n\)\(P\) 分成 \(n\) 個列向量 \(v_1,v_2,\cdots v_n\),那麼:

\[Av_i=\lambda_iv_i \]

因為 \(P\) 可逆,所以 \(v_1,v_2,\cdots,v_n\) 非零。

這對應著特徵值和特徵向量。

又因為 \(v_1,v_2,\cdots v_n\) 線性無關,那麼一個矩陣可對角化的條件是矩陣滿秩。

那麼矩陣對角化的方法是:

1.先找到 \(n\) 個特徵值。

2.對於每一個特徵值找對應的特徵向量。

\[(A-\lambda_i)v_i=0 \]

直接高斯消元可以求得 \(v\)

將所有 \(v\) 豎著拼在依次一個矩陣 \(P\) 裡,\(\lambda_i\) 依次填入對角矩陣 \(B\)

然後就得出了:\(PBP^{-1}=A\)

但是除非題目有特殊性質,否則根本沒用。

因為我需要對一個多項式求根,且還可能出現複數。

所以往往要用矩陣對角化的題目大機率是一個上三角/下三角矩陣

Perpetual Subtraction

\(f_{k,i}\) 表示 \(k\) 次後 \(x=i\) 的機率。

\[f_{k,i}=\sum_{j=i}^n\dfrac{f_{k-1,j}}{j+1} \]

\(f_{k,x}\) 看作列向量,那麼:

\[\begin{bmatrix} 1 & \frac{1}{2} &\cdots &\frac{1}{n+1}\\ 0 & \frac{1}{2} &\cdots &\frac{1}{n+1}\\ \vdots & \vdots &\ddots & \vdots\\ 0 & 0 & \cdots & \frac{1}{n+1} \end{bmatrix} f_k=f_{k+1} \]

矩陣對角化!

\[PBP^{-1}=A \]

首先這是一個上三角矩陣,對應的 \(\lambda_i=\dfrac{1}{i}\)

由於矩陣真的非常優美,考慮手摸特徵向量。

\[(A-\lambda_i E)v_i=0 \]

把它轉換成線性方程組的語言:

\[\begin{cases} (A_{1,1}-\lambda_i)v_1+A_{1,2}v_2+A_{1,3}v_3+\cdots +A_{1,n}v_n=0\\ (A_{2,2}-\lambda_i)v_2+A_{2,3}v_3+A_{2,4}v_4+\cdots +A_{2,n}v_n=0\\ (A_{3,3}-\lambda_i)v_3+A_{3,4}v_4+A_{3,5}v_5+\cdots +A_{3,n}v_n=0\\ \cdots\\ (A_{n,n}-\lambda_i)v_n=0 \end{cases} \]

倒著推算 \(v_j\),首先注意到 \(\forall j>i,v_j=0\)

來到第 \(i\) 行的時候,化簡後變成 \(v_i\times 0=0\)

注意到如果此時再將 \(v_i\) 設為 \(0\) 的話,那麼算出的向量 \(v\) 就只能是零向量了。

此時按理說是可以設為任意非零的值的,但是設為 \(1\) 能讓矩陣更加優美(最後特徵向量形成的矩陣比較有規律)

再根據已知的值推剩下的值 \(v_j\) 即可。

解出來(過程略,可手推)

\[v_j=\begin{cases} (-1)^{i+j}\binom{i}{j} & j\le i\\ 0 & j>i \end{cases} \]

把所有拼在一起得到矩陣 \(P\)

\[\begin{bmatrix} (-1)^0\binom{0}{0} & (-1)^1\binom{1}{0} & \cdots & (-1)^{n}\binom{n}{0} \\ 0 & (-1)^2\binom{1}{1} & \cdots & (-1)^{n+1}\binom{n}{1}\\ \vdots & \vdots & \ddots & \vdots\\ 0 & 0 & \cdots & (-1)^{n+n}\binom{n}{n} \end{bmatrix} \]

還需要求出 \(P^{-1}\),此時可以使用暴力矩陣求逆然後觀察規律。

實際上你仔細想想。

這個矩陣正好對應著二項式反演的係數矩陣!

\[\begin{aligned} f_i&=\sum_{j=i}^{n}(-1)^{i+j}\binom{j}{i}g_j \\ g_j&=\sum_{j=i}^{n}\binom{j}{i}f_j \end{aligned} \]

上面的係數矩陣對應著 \(P\),那麼它的逆也就對應著下面的矩陣,即矩陣 \(P^{-1}\)\((i,j)\) 的值為 \(\binom{j}{i}\)\(B\) 對應的對角矩陣第 \(i\) 行第 \(i\) 列為 \(\dfrac{1}{i}\),其餘位置均為 \(0\)

那麼現在就變為求

\[\begin{aligned} PBP^{-1}f_k&=f_{k+1}\\ (PBP^{-1})^kf_0&=f_k\\ PB^kP^{-1}f_0&=f_k\\ B^k(P(P^{-1}f_0))&=f_k \end{aligned} \]

下面簡寫 \(f_{0,i}\)\(f_i\)

考慮計算 \(P^{-1}f_0\)

\[\begin{aligned} g_i&=\sum_{j=i}^{n}(-1)^{i+j}\binom{j}{i}f_j\\ g_i&=\sum_{j=i}^{n}(-1)^{i+j}\dfrac{j!}{i!(j-i)!}f_j\\ g_i&=\dfrac{(-1)^i}{i!}\sum_{j=i}^{n}(-1)^jj!f_j\dfrac{1}{(j-i)!} \end{aligned} \]

這就是差卷積的板子。

\[P(P^{-1}f) \]

也是同樣的套路,最後再成個對角矩陣就做完了。

Tasty Dishes

非常好的一道題,難道出題人真的來自外天空?太神了!

首先觀察到隨著時間增加 \(a_i\) 單調不降,如果 \(i\) 能從 \(j\) 轉移而來當且僅當 \(a_j>0\),設 \(d_j\) 為恰好在第 \(d_j\) 天后大於第一次零。

因為 \(a_i\ge -i\) ,所以 \(a_j\) 一定會在 \(d_j+1\) 天大於零。那麼:

\[d_i=\min_{j \to i}d_j+1 \]

考慮所有點對詢問的貢獻,設 \(A_{i,j}=j[j\to i]\),特別的,\(A_{i,i}=i\)\(e_i\) 為長度為 \(n\) 的列向量且恰好只有第 \(i\) 行的值為 \(1\)

那麼答案為:

\[\left(\sum_{i=l}^{r}e_i^T\right)\left(\sum_{d_i\le k}A^{k-d_i}e_ia_i\right)+\sum_{i=l}^{r}[d_i>k]a_i \]

後一坨是煎蛋的,直接暴力掃一遍即可。

左邊還是困難的,主要問題在於 \(A\) 的矩陣大小太大了,做快速冪不能接受。

怎麼辦?還是考慮矩陣對角化!

\(A\) 矩陣是一個上三角矩陣,可以輕易地得到特徵值 \(\lambda_i=i\)

跟上一道題一樣,找特徵向量。

\[(A-\lambda_i E)v_i=0 \]

此題中的 \(A\) 並不是確定的,那就只能倒著消元得到 \(v_i\),過程跟上題類似,不展開。有趣的點在於可以將 \(v_{i,i}\) 設定成任意你喜歡的非零數。

現在將 \(A\) 化成了 \(PBP^{-1}\),直接帶入式子,發現只能少個 log,沒啥用。

仔細觀察式子的核心,發現我們只在意矩陣的某一列的值而並非所有值。

考慮將每個 \(e_i\)\(P[v_1,v_2,\cdots,v_n]\) 線性表示。

\[e_i=\sum_{j=1}^{n}c_{i,j}v_j \]

定睛一看,其實矩陣 \(c\) 就是 \(P^{-1}\) 的轉置。化簡左邊的一坨:

\[\begin{aligned} ans&=\left(\sum_{i=l}^{r}e_i^T\right)\left(\sum_{d_i\le k}A_{k-d_i}e_ia_i\right)\\ &=\left(\sum_{i=l}^{r}e_i^T\right)\left(\sum_{d_i\le k}a_iA^{k-d_i}\sum_{j=1}^{n}c_{i,j}v_j\right)\\ &=\left(\sum_{i=l}^{r}e_i^T\right)\left(\sum_{d_i\le k}a_i\sum_{j=1}^{n}c_{i,j}A^{k-d_i}v_j\right) \\ &=\left(\sum_{i=l}^{r}e_i^T\right)\left(\sum_{d_i\le k}a_i\sum_{j=1}^{n}c_{i,j}j^{k-d_i}v_j\right) \\ \end{aligned} \]

已經明晰了許多,考慮把前面一坨拿進來。

\[\begin{aligned} ans&=\sum_{d_i\le k}a_i\sum_{j=1}^{n}c_{i,j}j^{k-d_i}\sum_{p=l}^rv_{j,p} \\ &=\sum_{j=1}^nj^k\left(\sum_{p=l}^rv_{j,p}\right) \sum_{d_i\le k}a_ic_{i,j}j^{-d_i}\\ \end{aligned} \]

前面兩坨可以輕鬆的在 \(O(n)\) 的時間計算,只需考慮最後一坨。

考慮對每個 \(j\) 開一個樹狀陣列,下標維護 \(k\) 維度,每次相當於單點修改字首查詢。

注意到單點修改時,如果修改前 \(a_i\le 0\) 修改後 \(a_i>0\),那整個的 \(d\) 陣列需要重新計算,樹狀陣列也要全部修改。

但是一共最多重構 \(n\) 次,所以複雜度不會爆炸。

複雜度 \(O(n^3\log n+qn\log n)\),可以將前面的 log 去掉(\(O(n)\) 建樹狀陣列。)

相關文章