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



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

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将返回一个正交矩阵的特征向量,那么这里的问题是什么?

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

实对称矩阵的特征向量是正交的。但是你的输入矩阵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,直到eps的数值误差:

>> 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得到了如此不同的结果。这是我对正在发生的事情的猜测:正如@ArturoMagidin所指出的,

(1)对称矩阵的不同特征值所对应的特征向量必须彼此正交。对应于相同特征值的特征向量不必彼此正交。

(2)然而,由于每个子空间都有一个标准正交基,你可以找到每个特征空间的标准正交基,所以你可以找到特征向量的标准正交基。

只有当A是对称的时,Matlab才可能采取路由(2)(从而迫使V_a正交)。对于不完全对称的A,它可能采取路线(1)并给出每个子空间的基,但不一定是正交向量。

实矩阵的特征向量当且仅当AA'= a ' a且特征值不相等时正交。如果特征值不明显,MATLAB选择一个正交的向量系统。在上面的例子中,AA'~=A'A。此外,您必须考虑舍入和数值误差。

相关内容

  • 没有找到相关文章

最新更新