用 Matlab 计算左特征向量的精度

Precision of computing left eigenvectors with Matlab

Matlab通过方程

定义矩阵A的列左特征向量w

w*A=d w*

其中 w*w 的共轭转置。 implies 当您通过变换 D=S^{-1}AS 对角化矩阵 A 时,其中 D 是对角矩阵, S 的列是(右)特征向量A S 的行是 w 的共轭转置。但是,如果我在一个简单的矩阵上测试它,

A=[1+i,2-i,3;1,i,0.5i;5i,7,-2]

并通过

得到左右特征向量
[S,D,W]=eig(A)

我没有看到 W*S^{-1} 之间的关系。是精度问题吗?将 W*S 相乘得到具有复数项的对角矩阵。

这不是精度问题,而是缩放比例问题和特征向量 not unique. The only time the matrix of left eigenvectors (as rows) is guaranteed to be exactly the inverse of the matrix of right eigenvectors is for a Hermitian A; although their product is always diagonal 的事实。此外,右特征向量矩阵的逆矩阵的行始终是 A 的左特征向量,但不是唯一的特征向量。区别在于缩放。

对于你的例子(我将使用 RL = W' 因为我觉得它更自然):

>> A=[1+i,2-i,3;1,i,0.5i;5i,7,-2];
>> [R,D,W]=eig(A);
>> L = W';
>> Rinv = D/(A*R);

LRinv是左特征向量矩阵吗?

>> [norm(L*A - D*L) , norm(Rinv*A - D*Rinv)]
ans =
   1.0e-14 *
    0.4254    0.9041

是的,相对机器精度。


LR 的乘积是对角线吗?

>> LR = L*R
LR =
   0.8319 + 0.0826i   0.0000 + 0.0000i   0.0000 - 0.0000i
   0.0000 - 0.0000i   0.3976 + 0.4274i  -0.0000 - 0.0000i
  -0.0000 - 0.0000i   0.0000 + 0.0000i  -0.3079 - 0.4901i

是的。


现在如果我们缩放 L 的每个左特征向量(行)使得上面的乘积是恒等式,会发生什么?

>> Lp = bsxfun(@rdivide,L,diag(LR))
Lp =
  -0.4061 - 0.5332i  -0.3336 + 0.6109i   0.7017 - 0.0696i
   0.7784 + 0.0140i   0.9824 - 1.0560i   0.4772 - 0.1422i
   0.2099 - 0.0812i  -0.9004 + 1.4331i  -0.2219 - 0.1422i

>> Rinv
Rinv =
  -0.4061 - 0.5332i  -0.3336 + 0.6109i   0.7017 - 0.0696i
   0.7784 + 0.0140i   0.9824 - 1.0560i   0.4772 - 0.1422i
   0.2099 - 0.0812i  -0.9004 + 1.4331i  -0.2219 - 0.1422i

我们通过重新缩放恢复 Rinv。并且由于 Rinv 是一组左特征向量,所以它 Lp


重新缩放丢失了什么?

>> [diag(L*L'),diag(Lp*Lp')]

ans =

    1.0000    1.4310
    1.0000    2.9343
    1.0000    2.9846

特征向量不再是单位长度。