MATLAB:块对角化复杂的反对称矩阵

时间:2014-08-13 07:19:13

标签: matlab matrix linear

我使用以下函数来阻止对角化反对称矩阵。

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

1 个答案:

答案 0 :(得分:0)

复杂情况需要不同的算法。 Matlab文档说:

  

如果A是复数,则schur在矩阵T中返回复Schur形式。复Schur形式是上三角形,对角线上的特征值为A.

另外,我注意到你将矩阵D投射到double(D)。由于D已经加倍,因此没有实际效果。尽管如此,我已经看到ordeig返回特征值的不同值,具体取决于您是否输入Ddouble(D),即使是真实案例。这是深入挖掘的东西。