- $A \sim A $
- A∼B⇒B∼A
- A∼B,B∼C⇒A∼C
相似矩阵有相同的特征多项式,是因为 A∼B⇒∣λE−A∣=∣λE−B∣。
推出:有相同的行列式和迹。然而,有相同的特征多项式不意味着相似。
-
若 A∼B,且 A,B 均可逆,则 A−1∼B−1。B=P−1AP,B−1=P−1A−1P。
-
若 A∼B,则 kA∼kB。
-
若 A∼B,则 Am∼Bm,m∈Z+。处理矩阵幂次的技巧……
-
若 A∼B,则 g(A)∼g(B)。
以上和特征值的结论相似。
- 分块对角阵相似的条件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| #define Num poly #include "poly.h" #include "matrix.h" using namespace std; int main(){ Matrix A; cin>>A; Matrix B=A; for (int i=1;i<=A.row;++i){ B[i][i]=B[i][i]-Num("l"); } cout<<"Eigen Poly"<<endl; _poly x=Determinant(B).x; cout<<x<<endl; upoly _x; _x.init_from_poly(x); vector<pair<upoly,int> >v=Factorization(_x); cout<<"Factorization"<<endl; cout<<"C"; for (int i=0;i<v.size();++i){ cout<<"("<<v[i].first<<")^"<<v[i].second; } cout<<endl; vector<Matrix>s; for (int i=0;i<v.size();++i){ if (v[i].first.deg()==1){ Num lambda=poly(poly_ele((frac)(0)-v[i].first[0])); cout<<"lambda="<<lambda<<endl; cout<<"n="<<v[i].second<<endl; Matrix B=A-lambda*Matrix(A.row,A.col,1); vector<Matrix>baseS=baseSolution(B); cout<<"m="<<baseS.size()<<endl; for (int i=0;i<baseS.size();++i){ cout<<baseS[i]<<endl; s.push_back(baseS[i]); } } } if (s.size()==A.row){ Matrix P=s[0]; for (int i=1;i<s.size();++i){ P=addHorizontal(P,s[i]); } cout<<P<<endl; cout<<(P^-1)*A*P<<endl; } else{ cout<<"Non-similar diagonalization"<<endl; } }
|
对交大课本P193例题的解答。不会第四问
秩1矩阵的特征值为 n−1 个 0 和 一个 tr(A)。
代入 A=α,B=αT,就可以得到秩一矩阵的性质。
判断矩阵是否相似于一个对角阵,主要是看是否有 n 个线性无关的特征向量。
实对称矩阵的相似对角化
- 实对称矩阵的特征值全部是实数。
- 实对称矩阵的属于不同特征值的实特征向量正交。
- 设 A 为 n 阶实对称矩阵,则存在 n 阶正交矩阵 Q,使得 Q−1AQ=QTAQ=Λ。