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

时间:2016-06-06 12:46:06

标签: matlab matrix precision

Matlab通过等式

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

w*A=d w*

其中w*w的共轭转置。当A通过转换D=S^{-1}AS对矩阵D进行对角化时S,其中A是对角矩阵而S的列是(右)特征向量wA=[1+i,2-i,3;1,i,0.5i;5i,7,-2] [S,D,W]=eig(A) 的共轭转置。但是,如果我在一个简单的矩阵上测试它,

W*

通过

获取左右特征向量
S^{-1}

我没有看到W*S之间的关系。这是一个精确的问题吗?将{{1}}与{{1}}相乘会得到一个带有复杂条目的对角矩阵。

1 个答案:

答案 0 :(得分:2)

这不是精度问题,而是缩放问题和特征向量为not unique的事实。左特征向量矩阵(作为行)保证恰好是右特征向量矩阵的逆矩阵的唯一时间是Hermitian A;虽然他们的产品是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

重新缩放失去了什么?

{{1}}

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