块对角化一个复反对称矩阵



我使用下面的函数来块对角化反对称矩阵。

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

对于复杂情况,您需要使用不同的算法。Matlab文档说:

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

另外,我注意到您将矩阵D转换为double(D)。这没有实际效果,因为D已经是两倍了。尽管如此,我已经看到,ordeig返回不同的值的特征值取决于你是否输入Ddouble(D),甚至为实际情况。

相关内容

  • 没有找到相关文章

最新更新