我有以下代码片段,试图计算实对称矩阵的特征分解
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
应该使所有的都是实的。有人知道为什么会这样吗?
p。例如,将n = 6更改为实际值。
当矩阵是实数对称时,MATLAB eig
通常返回实数特征向量。舍入误差会使Z*B*Z'
稍有不对称。我不知道issymmetric
是如何实现的(它是一个内置函数),但也许eig
不使用相同的标准来确定矩阵是否比issymmetric
真实和对称。
(W+W')./2
。因此,eig((W+W')./2)
应该返回实数和向量。