MATLAB中对称矩阵的复特征向量

时间:2014-06-05 16:03:22

标签: matlab matrix eigenvector

我有以下代码片段,尝试计算实对称矩阵的特征分解

K = 3;
n = 10;

Z = rand(n,K);
B = rand(K,K);
B = 0.5*(B+B') + 3*eye(K);
W = Z*B*Z';
if issymmetric(W) && isreal(W)
    [U,D] = eig(W)
end

遗憾的是,这似乎在MATLAB R2013a上产生了真正复杂的特征向量。我曾经认为eig应该保持一切真实的对称矩阵。任何人都知道为什么会这样?

PS。例如,更改为n = 6,输出一些真实的东西。

1 个答案:

答案 0 :(得分:1)

当矩阵是真实且对称的时,MATLAB eig通常会返回实数特征向量。舍入错误可能会使Z*B*Z'略微不对称。我不知道issymmetric是如何实现的(它是内置函数),但也许eig没有使用相同的标准来确定矩阵是否真实并且比issymmetric对称。

强制矩阵在数值上对称的一种简单方法是执行(W+W')./2。所以eig((W+W')./2)应该返回实际值和向量。