線性代數基礎

Hanghang007發表於2024-04-25

線性代數基礎

煎蛋的東西不再贅述。

\(n\) 個向量,若存在向量能被其他向量線性表示,則稱這些向量線性相關,否則線性無關。

矩陣的行秩,將矩陣看成若干個行向量,從這些向量中選取儘可能多的向量滿足這些向量線性無關,選取的個數 \(k\) 即為矩陣的秩。

矩陣的列秩同理,一般來說,矩陣的秩預設為行秩。

行列式常用定理

定義:對一個 \(n\times n\) 的矩陣 \(A\),其 \(n\) 階行列式寫作 \(det(A)\)

\[det(A)=\sum_p(-1)^{\tau(p)}\prod_{i=1}^{n}a_{i,p_i} \]

\(p\) 為所有可能的排列,\(\tau(p)\) 表示一個排列 \(p\) 的逆序對個數。

定理一:\(det(^{t}A)=det(A)\),即矩陣轉置後值不變。

證明:考慮對於原來的每個排列 \(p\) ,在轉置後對應的 \(a_{i,p_i}\) 變成 \(a_{p_i,i}\),只需證明兩者的逆序對個數相同。

那麼考慮如果存在兩個下標 \(i,j\) 滿足 \(i< j\)\(p_i>p_j\),會對有 \(1\) 的貢獻,那麼在轉置後 \(p_j<p_i\)\(j>i\),也會有 \(1\) 的貢獻。

定理二:對換矩陣的某兩行行列式的值取相反數。

考慮對於任意一個排列 \(p\),對換矩陣兩行的影響相當於對換排列的兩個值。

如果這兩個值相鄰,無論兩者誰更大都會對逆序對個數造成 \(\pm 1\) 的貢獻。

考慮一般情況,如果中間間隔了 \(k\) 個數,那麼對換兩個值相當於在中間進行了 \(2m+1\) 次相鄰對換,每次相鄰對換均會造成 \(\pm 1\) 的貢獻,所以最終也會改變排列的奇偶性,即對行列式的貢獻取反。

推論:如果有矩陣有兩行相同,則行列式值為 \(0\)

對換兩行,那麼行列式取值為負,又因為交換兩行後矩陣一模一樣,即 \(det(A)=-det(A)\),推出行列式為 \(0\)

定理三:

\[\begin{aligned} &\begin{vmatrix} a_{1,1} & a_{1,2} & \cdots & a_{1,n}\\ a_{2,1} & a_{2,2} & \cdots & a_{2,n}\\ \vdots & \vdots & \ddots & \vdots \\ b_1+c_1 & b_2+c_2 & \cdots & b_n+c_n \\ a_{n,1} & a_{n,2} & \cdots & a_{n,n} \end{vmatrix} = \begin{vmatrix} a_{1,1} & a_{1,2} & \cdots & a_{1,n}\\ a_{2,1} & a_{2,2} & \cdots & a_{2,n}\\ \vdots & \vdots & \ddots & \vdots \\ b_1 & b_2 & \cdots & b_n \\ a_{n,1} & a_{n,2} & \cdots & a_{n,n} \end{vmatrix} + \begin{vmatrix} a_{1,1} & a_{1,2} & \cdots & a_{1,n}\\ a_{2,1} & a_{2,2} & \cdots & a_{2,n}\\ \vdots & \vdots & \ddots & \vdots \\ c_1 & c_2 & \cdots & c_n \\ a_{n,1} & a_{n,2} & \cdots & a_{n,n} \end{vmatrix} \end{aligned} \]

把行列式展開,每一項都有 \((b_{p_i}+c_{p_i})\),再把括號開啟即可得到後者。

定理四:將矩陣的某一行乘上一個係數 \(k\),行列式的值也會乘上 \(k\)

證明:還是把行列式展開,把每一項的 \(k\) 都提取出出來即可。

定理五:將某一行加上另外一行常數倍,行列式的值不變。

證明:結合定理三和定理四即可,讀者自證不難。

定理六:上三角矩陣的行列式值為主對角線上所有值相乘。

證明:除了主對角線的排列以外其他值都有係數為 \(0\) 的值。

利用以上定理就可以利用高斯消元得到行列式的取值了!

定理七:降價行列式/行列式展開/拉普拉斯展開:行列式的值等於所有元素於他們的代數餘子式的乘積之和。

\(n\times n\) 的矩陣 \(a\),定義 \(A_{i,j}\)\(a_{i,j}\) 的代數餘子式。

關於矩陣中一個位置 \(a_{i,j}\) 的餘子式指的是忽略第 \(i\) 行第 \(j\) 列,剩下的元素拼在一次的行列式的值。

代數餘子式指的是餘子式再乘 \((-1)^{i+j}\)

即:

\[det(a)=\sum_{j=1}^{n}a_{i,j}A_{i,j} \]

首先很好理解的是餘子式乘上當前元素的值,相當於給排列新增了一個元素。

唯一需要證明的是係數 \((-1)^{i+j}\)

證明:先用定義式將行列式展開,考慮列舉第 \(i\) 行的 \(p_i\)\(j\)

\(1\sim i-1\) 中有 \(x\)\(p_v\) 大於 \(j\),那 \(i+1\sim n\) 中有 \(j-1-(i-1-x)=j-i+x\) 個小於 \(j\) 的。那麼對逆序對的貢獻為 \(j-i+x+x\)

那麼有 \((-1)^{j-i+x+x}=(-1)^{j-i}=(-1)^{i+j}\)

有趣的小牛牛題,已知 \(1798,2139,3255,4867\)\(31\) 的倍數,請在不暴力展開行列式的情況下證明其值為 \(31\) 的倍數。

\[\begin{vmatrix} 1 & 7 & 9 & 8\\ 2 & 1 & 3 & 9\\ 3 & 2 & 5 & 5\\ 4 & 8 & 6 & 7 \end{vmatrix} \]

將第一列乘上 \(1000\) 倍,第二列乘上 \(100\) 倍,第三列乘上 \(10\) 倍加到第四列上,再對第四列行列式展開,發現 \(a_{i,j}\) 都為 \(31\) 的倍數。

範德蒙德行列

\[\begin{vmatrix} a_1^0 & a_2^0 & \cdots & a_n^0\\ a_1^1 & a_2^1 & \cdots & a_n^1\\ \vdots & \vdots & \ddots & \vdots \\ a_1^{n-1} & a_2^{n-1} & \cdots & a_n^{n-1} \end{vmatrix}=\prod_{1\le i<j\le n}(a_j-a_i) \]

證明:

用一些定理取化簡它,分兩步:

第一步:將 \(n-1\) 行的 \(-a_1\) 倍加到第 \(n\) 行,再將第 \(n-2\) 行的 \(-1\) 倍,第 \(1\) 行的 \(-x_1\) 倍加到第 \(2\) 行。 得到:

\[\begin{vmatrix} 1 & 1 & \cdots & 1\\ 0 & a_2-a_1 & \cdots & a_n-a_{n-1}\\ \vdots & \vdots & \ddots & \vdots \\ 0 & a_2^{n-2}(a_2-a_1) & \cdots & a_n^{n-2}(a_n-a_1) \end{vmatrix} \]

使用行列式展開把第一列展開,發現值其實是忽略第一行第一列的答案。

在對於右下角的那個矩形,每一列都提取出一個 \((a_i-a_1)\)

再不斷對剩下的矩形做如此操作即可得到答案。

以及一個很優美的式子:

\(det(AB)=det(A)det(B)\)

這是著名的柯西–比內公式,筆者很想去仔細證明,但是各種細節討論最終放棄了,有興趣的讀者可以去看看。

煎蛋例題:

Random Forest Rank

重新審視矩陣的秩,矩陣的秩的意義,也可以理解為非零子式的最大階數,也就是說,我們要找到一個最大的子式使得其行列式不為零。

考慮行列式的定義。

\[det(A)=\sum_p(-1)^{\tau(p)}\prod_{i=1}^{n}a_{i,p_i} \]

這裡的矩陣 \(a\) 為鄰接矩陣,所以說如果 \(a_{i,p_i}\) 有值,那麼存在邊 \((i,p_i)\),又因為原圖不存在環,所以排列中只能存在長度為 \(2\) 的迴圈,換言之,每個 \(i\) 只能和一個對應的 \(p_i\) 匹配。

那麼就轉化為求森林的最大匹配數的兩倍的期望。

煎蛋樹形 dp 即可,設 \(f_x\) 表示 \(x\) 沒有被匹配的機率。

\[\begin{aligned} f_x&=\prod_{y\in son_x}(1-f_y+\dfrac{f_y}{2})\\ ans&=\sum_{i=1}^{n}(1-f_x) \end{aligned} \]

Matrix Rank

\(f_{i,j}\) 表示前 \(i\) 行秩為 \(j\) 的矩陣數量。

\[f_{i,j}=f_{i-1,j}\times p^j+f_{i-1,j-1}\times (p^n-p^{j-1}) \]

即兩種情況,當前秩不增加即為前面的行向量組合得來,有 \(p^j\) 中方案,或者當前秩增加,有 \((p^n-p^{j-1})\) 種方案。

最後求得是一行 \(f\) 的所有值。

放到二維平面上,每次可以從 \((i,j)\) 走到 \((i+1,j)\) 水平步,或者 \((i+1,j+1)\) 右上步。

那麼對於一個終點 \(f(n,j)\),一定恰好走了 \(j\) 次右上步,每次的貢獻都是確定的,考慮設 \(g_{i,j}\)\(1\sim n\) 層走了若干次水平步,在第 \(i\) 層走水平步貢獻為 \(p^i\),恰好走了 \(j\) 次水平步的方案數。

那麼:

\[f_{i,j}=g_{j,i-j}\times\prod_{k=1}^{r}(p^n-p^{k-1}) \]

現在考慮求解 \(g\),對每一列直接上生成函式:\(G_i(x)=\sum_{j\ge 0}g_{i,j}x^j\)

\[G_i(x)=\prod_{j=0}^{i}\sum_{l\ge 0}(p^jx)^l=\prod_{j=0}^{i}\dfrac{1}{1-p^jx} \]

記:這裡貌似可以使用科技很簡便地得到答案。

\[\begin{aligned} G_i(px)&=\prod_{j=0}^{i}\dfrac{1}{1-p^{j+1}x}\\ (1-x)G_i(x)&=(1-p^{i+1}x)G_i(px) \end{aligned} \]

帶入第 \(r\) 次項的係數:

\[\begin{aligned} g_{i,r}-g_{i,r-1}&=p^r\times g_{i,r}-p^{i+1}\times p^{r-1}\times g_{i,r-1}\\ g_{i,r}&=\dfrac{p^{i+r}-1}{p^r-1}\times g_{i,r-1}\\ g_{i,r}&=\prod_{j=1}^{r}\dfrac{p^{i+j}-1}{p^j-1}\\ f_{n,r}&=\prod_{j=1}^{n-r}\dfrac{p^{r+j}}{p^j-1}\prod\sum_{j=1}^{r}(p^n-p^{j-1}) \end{aligned} \]

遞推從小到大維護 \(f_{n,i}\) 即可。

P10102 GDKOI2023 提高組] 矩陣

真心煎蛋題,考慮隨機一個 \(n\times 1\) 的向量 \(D\)(每一位值非零),我們只需要檢查 \(D\times A\times B=D\times C\)

錯誤機率分析:這個方法本質上檢驗了 \(D\times (A\times B-C)\) 是否為 \(0\),設 \(G=A\times B-C\)

首先如果 \(G\) 全零,那麼一定不會判錯。

否則假設最終答案 \((1,v)\) 判錯了,即:

\[\sum_{i=1}^{n}D_{1,i}G_{i,v}=0 \]

先算得前 \(n-1\) 項的答案,最後一項 \(D_{1,i}\) 的取值對應著恰好一個答案的取值,那麼錯誤機率為 \(\dfrac{1}{998244353}\)

相關文章