【问题标题】:MATLAB : Block diagonalize a complex antisymmetric matrixMATLAB:块对角化一个复杂的反对称矩阵
【发布时间】:2019-08-05 02:47:53
【问题描述】:

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

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 matrix linear-algebra


【解决方案1】:

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

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

另外,我注意到您将矩阵 D 转换为 double(D)。这没有实际影响,因为D 已经是两倍。尽管如此,我已经看到ordeig 返回不同的特征值值,这取决于您输入Ddouble(D),即使对于真实情况也是如此。这是需要更深入挖掘的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多