學習筆記 求矩陣的特徵多項式

2021-09-25 04:09:51 字數 2430 閱讀 4629

先膜拜一波神仙yww

給定乙個矩陣(沒有任何特殊性質),如何求它的特徵多項式?

直接把\(\lambda\)代入\((n+1)\)個點值,求完行列式之後插值即可。

時間複雜度\(o(n^4)\)

下面介紹乙個更快的做法。

定義對於矩陣\(\bm a,\bm b\), 若存在可逆矩陣\(\bm\phi\)滿足\(\bm a=\bm\phi^\bm b\bm\phi\), 則稱\(\bm a\)和\(\bm b\)為相似矩陣,\(\bm\phi\)稱為橋接矩陣

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

證明: 設\(\bm a\)和\(\bm b\)為相似矩陣,\(f(\lambda)\)和\(g(\lambda)\)分別為其特徵多項式,則\(f(\lambda)=|\lambda \bm i-\bm a|=|\lambda \bm \phi^\bm\phi-\bm\phi^\bm b\bm\phi|=|\bm \phi^(\lambda\bm i-\bm b)\bm\phi|=|\bm\phi^||\lambda \bm i-\bm b| |\bm\phi|=|\bm\phi^\bm\phi|g(\lambda)=g(\lambda)\). 證畢。

於是我們可以考慮把沒有特殊性質的矩陣化成有特殊性質的與之相似的矩陣來加速運算。

我們知道,對矩陣進行初等行(列)變換相當於將其左(右)乘乙個可逆的初等矩陣,那麼我們根據相似矩陣的定義,對\(\bm a\)進行初等行變換左乘初等矩陣的同時給它右乘同一初等矩陣的逆,不就構造出相似矩陣了嗎?

簡單推導可知,若左乘某一初等矩陣等價於把原矩陣第\(i\)行乘以\(x\)加到第\(j\)行上,則右乘該初等矩陣的逆矩陣等價於把原矩陣第\(j\)行乘以\(-x\)加到第\(i\)行上。

現在的問題是,我們對這個沒有特殊性質的矩陣左乘初等矩陣的同時右乘它的逆,能把它變成什麼有特殊性質的矩陣呢?

答案是,上海森堡矩陣。

定義若一\(n\times n\)矩陣滿足對於任意\(1\le j的\((i,j)\), 矩陣第\(i\)行第\(j\)列值均為\(0\),則其為上海森堡矩陣

至於為什麼是這個答案,首先變成上三角矩陣顯然不現實,因為用第\(i\)行來消第\(j\)行 (\(j>i\))的第\(i\)列時對第\(i\)行和第\(j\)行進行了初等行變換,那這對應的初等列變換勢必會影響第\(j\)列和第\(i\)列。那麼我們可以考慮在消第\(i\)列的時候,用第\((i+1)\)行來消第\(j\)行 (\(j>i+1\))的第\(i\)列,這樣進行的初等行變換是第\((i+1)\)行和第\(j\)行之間的,影響到的是第\((i+1)\)列和第\(j\)列,而不會影響第\(i\)列了。

現在問題轉化為,如何快速求上海森堡矩陣的特徵多項式?

這就非常簡單了,最後一行只有兩列有值,那麼列舉選的是哪一列,如果選第\(n\)列,那麼直接就是\((\lambda-a_)\)乘以左上角\((n-1)\times (n-1)\)的子矩陣的特徵多項式;若選第\((n-1)\)列,那麼第\((n-1)\)行選\((n-2)\)列,\((n-2)\)行選\((n-3)\)列……一直到某一行為止。假設這一行是第\((j+1)\)行選第\(j\)列 (\(0),那麼第\(j\)行一定選第\(n\)列,前\((j-1)\)行選的就是前\((j-1)\)列了,而\(a_,a_,...,a_,a_\)都是常數(都不在對角線上),所以直接遞推即可。

時間複雜度\(o(n^3)\).

(每一項對\(998244353\)取模, \(n\le 500\))

#include#include#include#include#include#define llong long long

using namespace std;

inline int read()

const int n = 500;

const int p = 998244353;

llong a[n+3][n+3];

llong c[n+3][n+3];

int n;

llong quickpow(llong x,llong y)

cur = cur*(p-a[j+1][j])%p;

coe = p-coe;

}for(int k=0; k<=i; k++) c[i][k] %= p;

// printf("%d: ",i); for(int j=0; j<=i; j++) printf("%lld ",c[i][j]); puts("");

}}int main()

charpoly();

for(int i=0; i<=n; i++) printf("%lld ",c[n][i]); puts("");

return 0;

}

多項式求逆學習筆記

今天學習了多項式求逆,總結一下。這裡是網上好的部落格 給定乙個多項式 a x 求出多項式 b x 使 a x b x equiv 1 pmod 考慮遞推求解,假設我們已經求出 b x 使 a x b x equiv 1 pmod rceil 又 a x b x equiv 1 pmod 所以 b x...

多項式特徵

在使用單項式特徵的時候,模型函式的型式是y a x b y c z d y a x b y c z d y a x b y c z d,但我們還可以加入多項式作為新的特徵,例如二項式增加以下特徵 x 在網路搜尋中使用 from sklearn.pipeline import pipeline fro...

數學 多項式 多項式求逆

多項式求逆 前置知識 ntt 給定乙個多項式 f left x right 求乙個多項式 g left x right 使得 f left x right g left x right equiv 1 left bmod 998244353 right 考慮遞迴求解。假定現在已經求出了 g 0 le...