用 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
的左特征向量,但不是唯一的特征向量。区别在于缩放。
对于你的例子(我将使用 R
和 L = 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);
L
和Rinv
是左特征向量矩阵吗?
>> [norm(L*A - D*L) , norm(Rinv*A - D*Rinv)]
ans =
1.0e-14 *
0.4254 0.9041
是的,相对机器精度。
L
和 R
的乘积是对角线吗?
>> 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
特征向量不再是单位长度。
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
的左特征向量,但不是唯一的特征向量。区别在于缩放。
对于你的例子(我将使用 R
和 L = 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);
L
和Rinv
是左特征向量矩阵吗?
>> [norm(L*A - D*L) , norm(Rinv*A - D*Rinv)]
ans =
1.0e-14 *
0.4254 0.9041
是的,相对机器精度。
L
和 R
的乘积是对角线吗?
>> 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
特征向量不再是单位长度。