我使用以下函数来阻止对角化反对称矩阵。
function [R, RI , S ] = Matrix_block (A)
[U,D]= schur (A);
E=ordeig(double(D)) ;
[R, S]= ordschur (U,D, abs(E)<1000*eps ) ;
RI=R';
该代码对于真实的反对称矩阵非常精确,但对于复杂的反对称矩阵则无法如下: -
a = rand(6); a = a-a'; [r,ri,s] = Matrix_block(a);
b = rand(6)+1i*rand(6); b= b-conj(b)'; [r,ri,s] = Matrix_block(b);
如何更正我的代码,使其也能用于复杂的矩阵?我想要一个块对角矩阵(以下形式)作为实矩阵和复矩阵的输出。
0 e1 -0.0000 -0.0000 0.0000 -0.0000
-e1 0 0.0000 0.0000 -0.0000 0.0000
0 0 -0.0000 e2 0.0000 -0.0000
0 0 -e2 -0.0000 0.0000 -0.0000
0 0 0 0 -0.0000 e3
0 0 0 0 -e3 -0.0000
答案 0 :(得分:0)
复杂情况需要不同的算法。 Matlab文档说:
如果A是复数,则schur在矩阵T中返回复Schur形式。复Schur形式是上三角形,对角线上的特征值为A.
另外,我注意到你将矩阵D
投射到double(D)
。由于D
已经加倍,因此没有实际效果。尽管如此,我已经看到ordeig
返回特征值的不同值,具体取决于您是否输入D
或double(D)
,即使是真实案例。这是深入挖掘的东西。