Matlab 不返回特征向量的正交矩阵

Matlab Not Returning Orthonormal Matrix of Eigenvectors

当我试图在 Matlab 中找到具有重复特征值但没有缺陷的矩阵的特征分解时,它不是 return 特征向量的正交矩阵。例如:

k = 5;
repeats = 1;

% First generate a random matrix of eignevectors that is orthonormal
V = orth(rand(k));

% Now generate a vector of eigenvalues with the given number of repeats
D = rand(k,1);
for i = 1:repeats
    % Put one random value into another (note this sometimes will result in
    % less than the given number of repeats if we ever input the same
    % number)
    D(ceil(k*rand())) = D(ceil(k*rand()));
end

A = V'*diag(D)*V;

% Now test the eignevector matrix of A
[V_A, D_A] = eig(A);

disp(V_A*V_A' - eye(k))

我发现我的特征向量矩阵 V_A 不是正交的,即 V_A*V_A' 不等于单位矩阵(考虑到舍入误差)。

我的印象是,如果我的矩阵是实数和对称矩阵,那么 Matlab 将 return 特征向量的正交矩阵,那么这里有什么问题?

这似乎是一个数值精度问题。

实对称矩阵的特征向量are orthogonal。但是您的输入矩阵 A 并不完全对称。正如数值错误所预期的那样,差异约为 eps

>> A-A.'
ans =
   1.0e-16 *
         0   -0.2082   -0.2776         0    0.1388
    0.2082         0         0   -0.1388         0
    0.2776         0         0   -0.2776         0
         0    0.1388    0.2776         0   -0.5551
   -0.1388         0         0    0.5551         0

如果你强制 A 完全 对称你会得到一个正交的 V_A,直到 [=13] 数量级的数字错误=]:

>> A = (A+A.')/2;
>> A-A.'
ans =
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
>> [V_A, D_A] = eig(A);
>> disp(V_A*V_A' - eye(k))
   1.0e-15 *
   -0.3331    0.2220    0.0755    0.1804         0
    0.2220   -0.2220    0.0572   -0.1665    0.1110
    0.0755    0.0572   -0.8882   -0.0590   -0.0763
    0.1804   -0.1665   -0.0590         0   -0.0555
         0    0.1110   -0.0763   -0.0555         0

不过,当 A 对称时 A 接近 对称时,V_A 获得如此截然不同的结果仍然令人惊讶.这是我对正在发生的事情的赌注:如 noted by @ArturoMagidin,

(1) Eigenvectors corresponding to distinct eigenvalues of a symmetric matrix must be orthogonal to each other. Eigenvectors corresponding to the same eigenvalue need not be orthogonal to each other.

(2) However, since every subspace has an orthonormal basis,you can find orthonormal bases for each eigenspace, so you can find an orthonormal basis of eigenvectors.

仅当 A 对称时,Matlab 才可能采用路线 (2)(因此强制 V_a 正交)。对于 A 不完全对称,它可能采用路线 (1) 并为您提供每个子空间的基础,但不一定是正交向量。

当且仅当 AA'=A'A 且特征值不同时,实矩阵的特征向量将是正交的。如果特征值不同,MATLAB 选择正交向量系统。在上面的例子中,AA'~=A'A。此外,您还必须考虑四舍五入和数值误差。