求任意矩陣的伴隨矩陣

风扇堵塞机器人發表於2024-06-18

今天學到一個非常魔怔的東西啊,求任意矩陣的伴隨矩陣(在模數為質數的情況下)

首先你也許知道求非奇異矩陣的伴隨矩陣的方法,設這個矩陣是 \(A\) ,稱它的伴隨矩陣是 \(A^*\) ,則我們有 \(A^*=|A|A^{-1}\)

但是問題是當 \(|A|=0\) 時,\(A^{-1}\) 就不存在了,咋辦?

我們現在做的矩陣求逆,相當於是找到一個矩陣 \(P\) 使得 \(AP=I\) ,但是由於不一定存在這樣的矩陣 \(P\) ,所以我們擴充套件一下,找到兩個非奇異矩陣 \(P,Q\) 滿足 \(PAQ=I_r\) ,其中 \(r\) 是矩陣的秩, \(I_{r_{i,j}}=[i = j \le r]\)

那麼由於 \((AB)^*=B^*A^*\) ,得出 \((PAQ)^*=Q^*A^*P^*=|P||Q|Q^{-1}A^*P^{-1}\) ,於是我們有 \(A^*=\frac{Q I_r^* P}{|P||Q|}\)

於是需要求 \(P,Q\) ,還是類似求矩陣逆,先初始化 \(P=Q=I\) ,然後嘗試把 \(A\) 消成 \(I_r\),每次對 \(A\) 做行變換的時候就對 \(P\) 做相同操作,做列變換(由於是任意矩陣,秩不一定為 \(0\) ,於是可能需要做一些列變換)就對 \(Q\) 做相同操作,於是就得到了 \(P,Q\) (至於為什麼要用兩個矩陣,大概是因為行變換容易用左乘表達,而列變換相反)。而且由於初等行/列變換要麼不改變行列式,要麼把行列式變為相反數(交換兩行或兩列),所以 \(|P|\ne 0, |Q|\ne 0\) ,這說明了我們得到的 \(P,Q\) 確實是非奇異矩陣

然後還有最後一步,求 \(I_r^*\) ,這個其實很弱智啊,當 \(r\le n-2\) 的時候就是全 \(0\) 的矩陣,當 \(r=n-1\) 就只有 \(I_{r_{n,n}}^*=1\) ,如果 \(r=n\) 就對角線上全為 \(1\)

求出上面這些,最後的式子就很好算了,時間複雜度 \(O(n^3)\)

造了點資料,不保證強度

相關文章