反對稱實矩陣正則化
之前構造了一個辦法來正則化反對稱實矩陣:https://www.cnblogs.com/luyi07/p/15578164.html
那個辦法只是初期嘗試做的,它有漏洞。只要反對稱實矩陣的特徵值有簡併,那個辦法就失敗。
所以現在重新做一個辦法來正則化反對稱實矩陣。
1. 反對稱實矩陣特徵值的特點
1.1 反對稱實矩陣的非0特徵值一定是純虛數
設有反厄米矩陣 \(K\),反厄米即 \(K^\dagger = -K\),可以定義
\[H = iK, \]則有
\[H^\dagger = - i K^\dagger = i K = H, \]即 \(H\) 是厄米矩陣。眾所周知,厄米矩陣的特徵值是實數,即存在么正矩陣 \(U\)
那麼,
\[K = -i H = U(-i\Lambda) U^\dagger, \]這說明 \((-i\Lambda)\) 的對角元是 \(K\) 的特徵值,\(U\) 的列向量是相應的本徵向量。所以 \(K\) 的非0本徵值都是純虛數。
反對稱實矩陣是反厄米矩陣的特殊情況,所以反對稱實矩陣的非0特徵值也是純虛數。
1.2 反對稱實矩陣的非0特徵值一定是兩兩一組,每組兩個特徵值互為共軛,兩個特徵向量也互為共軛
假設 \(K\) 有特徵值 \(\lambda\),有
\[K \vec{z} = \lambda \vec{z}, \]則有
再將上式左右取厄米共軛,得到
\[K \vec{z}^* = (\lambda \vec{z}^\top)^\dagger = \lambda^* \vec{z}^*, \]這說明,\((\lambda^*, \vec{z}^*)\) 也是一個本正對(即本徵值+本徵向量)。
前面證明了 \(\lambda\) 是純虛數,所以 \(\lambda \neq 0\) 時,\(\lambda^* \neq \lambda\)。
因此,反對稱實矩陣的非零特徵值一定是兩兩一組,每組兩個特徵值互為共軛。
2. 反對稱實矩陣正則化
2.1 非0本徵值無簡併的情況
我們先討論簡單的情況,即反對稱實矩陣的非0本徵值沒有簡併,即下面的式子中 \(\lambda_i \neq \lambda_j, i\neq j\).
綜合前面的分析,任意反對稱實矩陣 \(K\) 可以寫作
其中 \(\vec{z}_1, \vec{z}^*_1, \cdots\) 為正交歸一基,且 \(K \vec{z} = \lambda \vec{z},~~ K\vec{z}^* = \lambda^* \vec{z}^*\),且 \(\lambda \neq 0\),記
\[\vec{z} = \frac{\vec{x} + i \vec{y}}{\sqrt{2}},~~~~~~~ \vec{x}, \vec{y} \in R^n \]由歸一性,
\[\vec{z}^* \cdot \vec{z} = (\vec{x} - i \vec{y}) \cdot (\vec{x} + i \vec{y})/2 = \frac{ |\vec{x}|^2 + |\vec{y}|^2 }{2} = 1, \Rightarrow |\vec{x}|^2 + |\vec{y}|^2 = 2. \]由於 \(\lambda \neq \lambda^*\), 所以 \(\vec{z}, \vec{z}^*\) 必須正交——注意,復向量內積定義為\((\vec{\alpha}, \vec{\beta}) = \vec{\alpha}^* \cdot \vec{\beta}\)——即
\[\vec{z} \cdot \vec{z} = 0 \Rightarrow (\vec{x} - i \vec{y}) \cdot (\vec{x} + i \vec{y}) = 0 \Rightarrow \{ \vec{x} \cdot \vec{y} = 0, \vec{x}\cdot \vec{x} - \vec{y} \cdot \vec{y} = 0 \}, \]所以有
\[|\vec{x}| = |\vec{y}| = 1, ~~~ \vec{x} \perp \vec{y}. \]另外
\[\left\{\vec{z}_k, \vec{z}^*_k\right\} \perp \left\{ \vec{z}_l, \vec{z}^*_l \right\} \Rightarrow \left\{ \vec{x}_k, \vec{y}_k \right\} \perp \left\{ \vec{x}_l, \vec{y}_l \right\}, \]所以,以下基矢是正交歸一基:
\[\left\{ \vec{x}_1, \vec{y}_1, \cdots, \vec{x}_k, \vec{y}_k, \vec{w}_{2k+1}, \cdots, \vec{w}_n \right\}, \]其中,\(\vec{w}_{2k+1}, \cdots, \vec{w}_n\) 是人為補齊的實數向量,對應值為 \(0\) 的特徵值。
這套正交歸一基有如下結構:
- \(\left\{ \vec{x}_i, \vec{y}_i \right\}\) 構成 \(K\) 的不變子空間。
- \(\left\{ \vec{w}_{2k+1}, \cdots, \vec{w}_n \right\}\) 構成 \(K\) 的不變子空間。
所以,如果用這套正交歸一基構造么正變換,會得到塊對角形式
\[K [ \vec{x}_1, \vec{y}_1, \cdots, \vec{x}_k, \vec{x}_y, \vec{w}_{2k+1}, \cdots, \vec{w}_n] \\ =\left[ \vec{x}_1, \vec{y}_1, \cdots, \vec{x}_k, \vec{x}_y, \vec{w}_{2k+1}, \cdots, \vec{w}_n \right] \left[ [\begin{smallmatrix} 0 & -i\sqrt{2}\lambda_1 \\ i\sqrt{2}\lambda_1 & 0 \end{smallmatrix}], \cdots, [\begin{smallmatrix} 0 & -i\sqrt{2}\lambda_k \\ i\sqrt{2}\lambda_k & 0 \end{smallmatrix}], 0, \cdots, 0 \right]. \]由於 \(\lambda_1, \cdots, \lambda_k\) 都是純虛數,所以這樣就把 \(K\) 正則化了。
\[[ \vec{x}_1, \vec{y}_1, \cdots, \vec{x}_k, \vec{x}_y, \vec{w}_{2k+1}, \cdots, \vec{w}_n]^\top K [ \vec{x}_1, \vec{y}_1, \cdots, \vec{x}_k, \vec{x}_y, \vec{w}_{2k+1}, \cdots, \vec{w}_n] \\ = \left[ [\begin{smallmatrix} 0 & -i\sqrt{2}\lambda_1 \\ i\sqrt{2}\lambda_1 & 0 \end{smallmatrix}], \cdots, [\begin{smallmatrix} 0 & -i\sqrt{2}\lambda_k \\ i\sqrt{2}\lambda_k & 0 \end{smallmatrix}], 0, \cdots, 0 \right]. \]2.2 非0本徵值有簡併的情況
非0本徵值有簡併的時候,就存在子空間。以2重簡併為例(更高的簡併是同理),假設 \(\lambda\) 有兩重簡併,那麼根據前面的分析,\(-\lambda\) 自然也是2重簡併。
\[K \vec{z}_1 = \lambda \vec{z}_1, ~~ K \vec{z}_2 = \lambda \vec{z}_2, ~~ \vec{z}_1 \perp \vec{z}_2, |\vec{z}_1| = |\vec{z}_2| = 1; \\ K \vec{z}_3 = -\lambda \vec{z}_3, ~~ K \vec{z}_4 = - \lambda \vec{z}_3, ~~ \vec{z}_3 \perp \vec{z}_4, |\vec{z}_3| = |\vec{z}_4| = 1.\\ K[\vec{z}_1, \vec{z}_2, \vec{z}_3, \vec{z}_4] = [\vec{z}_1, \vec{z}_2, \vec{z}_3, \vec{z}_4]diag\{\lambda, \lambda, -\lambda, -\lambda\}. \\ \vec{z}_i = (\vec{x}_i + i \vec{y}_i)/\sqrt{2}. \]2.2.1 \(\vec{x}_i, \vec{y}_i\) 這兩個向量正交歸一
假設其對應的特徵值是 \(\mu\),則有
\[K \vec{z}_i = \mu \vec{z}_i, ~~ \Rightarrow ~~ K \vec{z}^*_i = - \mu \vec{z}^*_i, ~~ \Rightarrow ~~ \vec{z}_i \perp \vec{z}^*_i \]因此有
\[(\vec{z}^*_i, \vec{z}_i) = \frac{1}{2}( |\vec{x}_i|^2 - |\vec{y}_i|^2 + 2i \vec{x}_i \cdot \vec{y}_i ) = 0, ~~\Rightarrow~~ |\vec{x}_i| = |\vec{y}_i|, \vec{x}_i \perp \vec{y}_i. \]另外有歸一化條件
\[(\vec{z}_i, \vec{z}_i) = \frac{1}{2}( |\vec{x}|^2 + |\vec{y}|^2 ) = 1, \]所以有
\[|\vec{x}_i| = |\vec{y}_i| = 1, \vec{x}_i \perp \vec{y}_i. \]2.2.2 \(\vec{x}_1, \vec{y}_1, \vec{x}_2, \vec{y}_2\)正交
\(\vec{z}_1 \perp \vec{z}_2\),這是我們知道的;另外,由於 \(\vec{z}^*_2\) 對應 \(-\lambda\),所以也有 \(\vec{z}_1 \perp \vec{z}^*_2\);所以,自然有 \(\vec{z}_1 \perp \{ \vec{x}_2, \vec{y}_2 \}\)。
另外,\(\vec{z}_1 \perp \vec{z}_2 \Rightarrow \vec{z}^*_1 \perp \vec{z}^*_2\);由於 \(\vec{z}_2\) 對應 \(\lambda\),所以也有 \(\vec{z}^*_1 \perp \vec{z}_2\);所以,有 \(\vec{z}^*_1 \perp \{\vec{x}_2, \vec{y}_2\}\)。
而前面已經分析得到 \(\vec{z}_1 \perp \vec{z}^*_1\),所以有 \(\{x_1, y_1\} \perp \{\vec{x}_2, \vec{y}_2\}\)。
這樣可以分析得到 \(\{ \vec{x}_1, \vec{y}_1, \vec{x}_2, \vec{y}_2\}\)是一組正交歸一實數基,張成一個不變子空間;類似地,\(\{ \vec{x}_3, \vec{y}_3, \vec{x}_4, \vec{y}_4\}\)也是一組正交歸一實數基,也可以張成同一個不變子空間。\(\vec{x}_3\) 不一定等於 \(\vec{x}_1\) 或 \(\vec{x}_2\)。
對於反對稱實矩陣的這個不變子空間,取 \(\{ \vec{x}_1, \vec{y}_1, \vec{x}_2, \vec{y}_2\}\) 這組基,即在這個子空間內完成正則化:
\[K[\vec{x}_1, \vec{y}_1, \vec{x}_2, \vec{y}_2] = [\vec{x}_1, \vec{y}_1, \vec{x}_2, \vec{y}_2] \left[ [\begin{smallmatrix} 0 & -i\sqrt{2}\lambda_1 \\ i\sqrt{2}\lambda_1 & 0 \end{smallmatrix}], [\begin{smallmatrix} 0 & -i\sqrt{2}\lambda_2 \\ i\sqrt{2}\lambda_2 & 0 \end{smallmatrix}] \right]. \]3. 數值驗證
根據上面的理論推導,我們得到結論:只要能把反對稱實矩陣 \(K\) 對角化,就能通過實正交變換把它正則化,變為實數正則矩陣。
如何對角化反對稱實矩陣呢?GSL 有現成的函式,只是要稍微變一下。
3.1 反對稱實矩陣 \(\rightarrow\) 厄米複數矩陣
反對稱實矩陣 \(K\) 只要乘上 \(i\),就是一個厄米矩陣:
\[H = i K \Rightarrow H^\dagger = H. \]3.2 GSL庫函式:對角化厄米複數矩陣
通過翻閱 GSL 的文件,可以發現 gsl_eigen_hermv 函式,可以對角化複數厄米矩陣。所以我寫了個函式做這個,如下。
#include<gsl/gsl_complex.h>
#include<gsl/gsl_complex_math.h>
#include<gsl/gsl_math.h>
#include<gsl/gsl_eigen.h>
#include<complex>
/*
* GSL_eigen_hermv: given complex Hermitian matrix H[], get eigenvalues eig[] and eigenvectors eigvec[]
* in respec to eig[i], its eigenvector is eigvec[i*n + x ], x = 0,...,n-1
*/
void GSL_eigen_hermv( int n, complex<double> * H, double * eig, complex<double> * eigvec ){
gsl_eigen_hermv_workspace * w = gsl_eigen_hermv_alloc( n );
gsl_matrix_complex * A = gsl_matrix_complex_alloc( n, n );
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
gsl_matrix_complex_set( A, i, j, gsl_complex_rect( H[i*n+j].real(), H[i*n+j].imag() ) );
gsl_matrix_complex * evec = gsl_matrix_complex_alloc( n, n );
gsl_vector * eval = gsl_vector_alloc( n );
cout<< " gsl_eigen_herm returns "<< gsl_eigen_hermv( A, eval, evec, w );
cout<<", it seems 0 means OK. \n";
gsl_eigen_hermv_sort( eval, evec, GSL_EIGEN_SORT_ABS_ASC );
for(int i=0;i<n;i++){
double eval_i = gsl_vector_get( eval, i ); eig[i] = eval_i;
cout<<" eigenvalue = "<<eval_i<<endl;
gsl_vector_complex_view evec_i = gsl_matrix_complex_column( evec, i );
gsl_vector_complex_fprintf( stdout, &evec_i.vector, "%g");
for(int j=0;j<n;j++){
gsl_complex x = gsl_matrix_complex_get( evec, j, i );
eigvec[i*n+j].real( GSL_REAL(x) ); eigvec[i*n+j].imag( GSL_IMAG(x) );
}
}
gsl_eigen_hermv_free( w );
gsl_matrix_complex_free( A );
gsl_vector_free( eval );
gsl_matrix_complex_free( evec );
}
然後寫了個測試主函式,使用 GSL 文件上的實數對稱陣測試例子,進行測試。
int main(){
double data[] = { 0.0 , 1/2.0, 1/3.0, 1/4.0,
-1/2.0, 0.0, 1/4.0, 1/5.0,
-1/3.0, -1/4.0, 0.0, 1/6.0,
-1/4.0, -1/5.0, -1/6.0, 0.0 };
complex<double> * H = new complex<double> [ 4*4 ];
complex<double> x; x.real(0); x.imag(1);
cout<<" x = "<< x <<endl;
for(int i=0;i<16;i++) H[i] = data[i] * x ;
cout<<" H : "<<endl;
for(int i=0;i<4;i++){
for(int j=0;j<4;j++)cout<<H[i*4+j]<<" "; cout<<endl;
}
double * eig = new double [ 4 ];
complex<double> * eigvec = new complex<double> [ 4*4 ];
GSL_eigen_hermv( 4, H, eig, eigvec );
cout<<" eig: "; for(int i=0;i<4;i++)cout<<eig[i]<<","; cout<<endl;
cout<<" eigvec: "<<endl;
for(int i=0;i<4;i++){
for(int j=0;j<4;j++)cout<<eigvec[i*4+j]<<","; cout<<endl;
}
return 0;
}
命名為 test_complex_Hermitian.cpp,進行編譯執行
g++ test_complex_Hermitian.cpp -lgsl -lgslcblas
./a.out
得到結果
x = (0,1)
H :
(0,0) (0,0.5) (0,0.333333) (0,0.25)
(-0,-0.5) (0,0) (0,0.25) (0,0.2)
(-0,-0.333333) (-0,-0.25) (0,0) (0,0.166667)
(-0,-0.25) (-0,-0.2) (-0,-0.166667) (0,0)
gsl_eigen_herm returns 0, it seems 0 means OK.
eigenvalue = 0.1075
-0.334421 0
0.375581 0.194331
-0.234738 -0.515822
-0.438178 0.442903
eigenvalue = -0.1075
-0.334421 0
0.375581 -0.194331
-0.234738 0.515822
-0.438178 -0.442903
eigenvalue = -0.736432
0.623027 0
0.2016 0.529653
-0.126 0.40367
-0.2352 0.237736
eigenvalue = 0.736432
0.623027 0
0.2016 -0.529653
-0.126 -0.40367
-0.2352 -0.237736
eig: 0.1075,-0.1075,-0.736432,0.736432,
eigvec:
(-0.334421,0),(0.375581,0.194331),(-0.234738,-0.515822),(-0.438178,0.442903),
(-0.334421,0),(0.375581,-0.194331),(-0.234738,0.515822),(-0.438178,-0.442903),
(0.623027,0),(0.2016,0.529653),(-0.126,0.40367),(-0.2352,0.237736),
(0.623027,0),(0.2016,-0.529653),(-0.126,-0.40367),(-0.2352,-0.237736),
與 GSL 文件上的參考結果一致。
3.3 自編函式:正則化反對稱實矩陣
根據前面的理論推斷,對於給定的反對稱實矩陣 \(K\),我們可以如下正則化:
- 對角化 \(H = iK\)
- 將 \(H\) 的所有本徵對——即(本徵值,本徵矢)這樣的對——按本徵值的絕對值降序重排
- 取所有特徵值大於0的特徵向量,錄用其實部向量、虛部向量:
根據前面的理論分析,這些實部、虛部向量一定是正交歸一的。
-
補齊正交歸一基。即補齊 \(w_{2k+1}, \cdots w_n\),使得它們與 \(\vec{x}_1, \vec{y}_1, \cdots, \vec{x}_k, \vec{y}_k\) 構成完備的正交歸一基。這一步我打算偷點懶,假定 gsl_eigen_hermv 對於0本徵值返回實數的特徵向量(試了個例子似乎確然如此),那麼就直接錄 \(\vec{z}_{2k+1}, \cdots, \vec{z}_n\)即可。
-
最後,得到新的實數正交歸一基以後,用這些基做正交變換,得到 \(K\) 的正則形式。
寫出來的程式碼如下:
/*
* ARMC: transform an Anti-Real-Matrix into Canonical form
*
* M = U^\top Mcanonical U
*/
void ARMC( int n, double * M, double * U, double * Mcanonical ){
complex<double> * H = new complex<double> [ n*n ];
complex<double> x; x.real(0); x.imag(1);
for(int i=0;i<n*n;i++) H[i] = M[i] * x ;
double * eig = new double [ n ];
complex<double> * eigvec = new complex<double> [ n*n ];
GSL_eigen_hermv( n, H, eig, eigvec );
double * xtemp = new double [n]; double * ytemp = new double [n];
int count = 0;
for(int i=0;i<n;i++){
if( eig[i] > 1E-10 ){
for(int j=0;j<n;j++){
xtemp[j] = eigvec[i*n+j].real() * sqrt(2);
ytemp[j] = eigvec[i*n+j].imag() * sqrt(2);
U[count*n+j] = xtemp[j]; U[(count+1)*n+j] = ytemp[j];
}
count+=2;
}
}
while( count < n ){ // eigvecs of M, with eigvalue = 0. Here I assume they are all real, thanks to GSL_eigen_hermv
for(int j=0;j<n;j++) U[count*n+j] = eigvec[count*n+j].real();
count++;
}
// UM
double * UM = new double [ n*n ];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++){
double x = 0;
for(int k=0;k<n;k++) x += U[i*n+k] * M[k*n+j];
UM[i*n+j] = x;
}
// Mcanonical = (UM) * U^\top
for(int i=0;i<n;i++)
for(int j=0;j<n;j++){
double x = 0;
for(int k=0;k<n;k++) x += UM[i*n+k] * U[j*n+k];
Mcanonical[i*n+j] = x;
}
delete [] xtemp; delete [] ytemp;
delete [] UM; delete [] eigvec; delete [] eig; delete [] H;
}
測試:
加了幾行測試輸出程式碼,正則化 12*12 反對稱陣:
0 0.0582782 0.0809623 0 0.242372 0.148711 0.0747338 0.1232 0.00109344 0.0352467 0.142309 0.0586949
-0.0582782 0 0 0.0809623 0.130991 0.0181291 0.141333 0.00607454 0.146359 -0.0488136 0.16139 0.00949629
-0.0809623 -0 0 -0.0582782 0.0488136 0.146359 -0.00607454 0.141333 -0.0181291 0.130991 -0.00949629 0.16139
-0 -0.0809623 0.0582782 0 0.0352467 -0.00109344 0.1232 -0.0747338 0.148711 -0.242372 0.0586949 -0.142309
-0.242372 -0.130991 -0.0488136 -0.0352467 0 0.17432 0.165275 0.123782 0.257831 0 0.0425534 0.19093
-0.148711 -0.0181291 -0.146359 0.00109344 -0.17432 0 -0.0727708 0.068801 0 0.257831 -0.098141 0.235799
-0.0747338 -0.141333 0.00607454 -0.1232 -0.165275 0.0727708 0 0 0.068801 -0.123782 -0.151594 -0.00598481
-0.1232 -0.00607454 -0.141333 0.0747338 -0.123782 -0.068801 -0 0 0.0727708 0.165275 -0.00598481 0.151594
-0.00109344 -0.146359 0.0181291 -0.148711 -0.257831 -0 -0.068801 -0.0727708 0 -0.17432 -0.235799 -0.098141
-0.0352467 0.0488136 -0.130991 0.242372 -0 -0.257831 0.123782 -0.165275 0.17432 0 0.19093 -0.0425534
-0.142309 -0.16139 0.00949629 -0.0586949 -0.0425534 0.098141 0.151594 0.00598481 0.235799 -0.19093 0 0
-0.0586949 -0.00949629 -0.16139 0.142309 -0.19093 -0.235799 0.00598481 -0.151594 0.098141 0.0425534 -0 0
得到
U:
0.24671, -0.161599, 0.37745, -0.362252, 0.0738795, 0.262264, -0.0318841, -0.00947129, -0.129967, -0.576762, -0.209285, -0.413076,
0, -0.0882589, -0.135615, 0.28447, -0.178613, -0.461309, 0.218999, -0.428768, 0.365394, -0.38025, 0.159811, -0.335772,
0.460598, 0.380616, 0.0725851, 0.194033, 0.218767, -0.327888, -0.257363, -0.160333, -0.491176, 0.168418, 0.117501, -0.263301,
0, -0.126458, -0.16922, -0.152371, -0.655275, -0.207107, -0.343068, -0.152547, -0.200834, 0.0948469, -0.5192, 0.00356828,
-0.504934, -0.413395, 0.17171, -0.143605, 0.202116, -0.0107138, -0.17804, -0.503161, -0.319182, 0.165752, 0.254845, -0.0625096,
0, 0.231596, 0.364676, 0.363082, -0.545472, 0.49278, -0.00335252, -0.203226, -0.0834354, -0.0172791, 0.301377, 0.0421248,
-0.39045, 0.27596, -0.367408, 0.185712, 0.0770305, 0.0398065, 0.00392156, 0.0623645, -0.46218, -0.581575, -0.0621629, 0.186522,
0, 0.293801, 0.299239, -0.469542, -0.147778, -0.327497, 0.542638, -0.166793, -0.171279, -0.0126727, 0.0426349, 0.347827,
0.114036, 0.336157, -0.534772, -0.451243, 0.0233895, 0.376752, -0.0454721, -0.411711, 0.159359, 0.0764926, 0.14748, -0.131655,
0, -0.0915267, -0.104262, -0.320859, -0.305242, -0.213516, -0.268213, 0.444296, -0.0574054, -0.140221, 0.663576, -0.0800786,
-0.553688, 0.496246, 0.220921, -0.0929369, -0.0189173, -0.0966079, -0.0780678, 0.192486, 0.183313, 0.157824, -0.153701, -0.504731,
0, 0.224926, 0.269393, -0.0660833, 0.158604, -0.139132, -0.600674, -0.192236, 0.392337, -0.262319, -0.0110313, 0.455335,
Mcanonical:
0, -0.707073, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0.707073, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, -0.707073, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0.707073, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, -0.00687151, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0.00687151, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, -0.00687151, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0.00687151, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, -0.000784735, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0.000784735, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.000784735,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000784735, 0,
另外測試本徵值有 0 的反對稱實矩陣
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 -0 0 -0.0582782 0.0488136 0.146359 -0.00607454 0.141333 -0.0181291 0.130991 -0.00949629 0.16139
-0 -0.0 0.0582782 0 0.0352467 -0.00109344 0.1232 -0.0747338 0.148711 -0.242372 0.0586949 -0.142309
-0.0 -0.0 -0.0488136 -0.0352467 0 0.17432 0.165275 0.123782 0.257831 0 0.0425534 0.19093
-0.0 -0.0 -0.146359 0.00109344 -0.17432 0 -0.0727708 0.068801 0 0.257831 -0.098141 0.235799
-0.0 -0.0 0.00607454 -0.1232 -0.165275 0.0727708 0 0 0.068801 -0.123782 -0.151594 -0.00598481
-0.0 -0.0 -0.141333 0.0747338 -0.123782 -0.068801 -0 0 0.0727708 0.165275 -0.00598481 0.151594
-0.0 -0.0 0.0181291 -0.148711 -0.257831 -0 -0.068801 -0.0727708 0 -0.17432 -0.235799 -0.098141
-0.0 0.0 -0.130991 0.242372 -0 -0.257831 0.123782 -0.165275 0.17432 0 0.19093 -0.0425534
-0.0 -0.0 0.00949629 -0.0586949 -0.0425534 0.098141 0.151594 0.00598481 0.235799 -0.19093 0 0
-0.0 -0.0 -0.16139 0.142309 -0.19093 -0.235799 0.00598481 -0.151594 0.098141 0.0425534 -0 0
得到
U:
0, 0, -0.395163, 0.44073, -0.117531, -0.441911, -0.0208166, -0.124056, 0.0612319, 0.544158, 0.214009, 0.281114,
0, 0, 0, -0.250065, -0.0198452, 0.378119, -0.244911, 0.395889, -0.300962, 0.484856, -0.237043, 0.442196,
0, 0, -0.245674, -0.172487, -0.641937, 0.0870772, 0.146768, -0.022326, 0.518727, -0.15687, -0.33935, 0.243605,
0, 0, 0, 0.0782339, 0.39862, 0.335716, 0.428845, 0.264016, 0.472958, 0.00912163, 0.394059, 0.299347,
0, 0, 0.552342, -0.318859, -0.166778, 0.0159522, 0.0533873, -0.348302, 0.28037, 0.548004, 0.17742, -0.174987,
0, 0, 0, 0.503196, -0.131035, 0.432106, -0.493068, 0.169037, 0.311836, 0.101262, 0.0183059, -0.404213,
0, 0, -0.422101, -0.332344, 0.452347, 0.132859, -0.41161, -0.499227, 0.248035, 0.00468517, -0.0690757, 0.0643759,
0, 0, 0, 0.108948, -0.342077, 0.437731, -0.0463857, -0.432066, -0.346534, -0.211698, 0.490304, 0.292186,
0, 0, 0.547941, 0.30591, 0.144001, -0.193388, -0.320104, -0.132951, 0.185184, -0.226694, -0.229868, 0.537939,
0, 0, 0, 0.369557, 0.165698, 0.328366, 0.462741, -0.392692, -0.145453, 0.193199, -0.545663, -0.0598417,
0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Mcanonical:
0, -0.680657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0.680657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, -0.553307, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0.553307, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, -0.00614115, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0.00614115, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, -0.00304889, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0.00304889, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, -0.000424323, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0.000424323, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
通過了測試。