对于矩阵的特征分解,左、右特征向量应相互正交。使用西皮.利纳格.艾格我把这个问题作为标准特征值问题和一般特征值问题来解决。标准特征值问题返回的左/右特征向量相互正交,通过计算它们的点积进行验证。对于一般特征值问题,返回的左/右特征向量互不正交。在
小结:
左/右e矢量互不正交:
evals, evecs_l, evecs_r = scipy.linalg.eig(M, N, left=True, right=True)
左/右e矢量相互正交:
^{pr2}$示例:
import numpy as np
import scipy.linalg
M = np.array([[1., 2.],
[4., 5.]])
N = np.array([[0.2, 0.1],
[0.7, 0.8]])
evals, evecs_l, evecs_r = scipy.linalg.eig(M,N,left=True,right=True)
np.set_printoptions(precision=3,linewidth=200)
print('inner product: GEP')
I = evecs_l.conj().T @ evecs_r
for i in range(I.shape[1]):
print(I[i,:])
evals, evecs_l, evecs_r = scipy.linalg.eig(np.linalg.inv(N) @ M,left=True,right=True)
print('inner product: SEP')
I = evecs_l.conj().T @ evecs_r
np.set_printoptions(precision=3,linewidth=200)
for i in range(I.shape[1]):
print(I[i,:])
退货:
inner product: GEP
[-0.153 -0.818]
[0.932 0.907]
inner product: SEP
[0.721 0. ]
[0. 0.721]
所以,我想知道是否有人能深入了解这种行为。我是否错误地解释了结果或预期行为?在
系统: Python3.6.4、numpy 1.14.0、scipy 1.0.0、OS X 10.13.3
在正则特征值分解中,左、右特征向量正交的陈述可以重述为乘积
evecs_l.conj().T @ evecs_r
是对角的。对于广义特征值问题Mx = λNx
,这种说法通常是不正确的。在那里,它变成了乘积evecs_l.conj().T @ N @ evecs_r
是对角线的。(我们需要写evecs_l.conj().T
,而不仅仅是evecs_l
,因为scipy.linalg.eig
返回矩阵列中左特征向量的共轭。)例如
相关问题 更多 >
编程相关推荐