numpy.linalg.eig 计算方阵的特征值和右特征向量

计算方阵的特征值和右特征向量。

参数:
a : ( …,M,M)数组
将计算特征值和右特征向量的矩阵

返回:
w : ( …,M)数组
特征值,每个都根据其多样性重复。特征值不一定是有序的。结果数组将是复数类型,除非虚部为零,在这种情况下它将被转换为实数类型。当a 是实数时,得到的特征值将是实数(0虚部)或出现在共轭对中

v : ( …,M,M)数组
归一化(单位“长度”)特征向量,使得列v[:,i]是对应于特征值的特征向量w[i]。

举:
LinAlgError
如果特征值计算不收敛。

也可以看看
eigvals
非对称阵列的特征值。
eigh
实对称或复Hermitian(共轭对称)阵列的特征值和特征向量。
eigvalsh
实对称或复Hermitian(共轭对称)阵列的特征值。

笔记

1.8.0版中的新功能。

广播规则适用,请参阅numpy.linalg文档以获取详细信息。

这是使用_geev LAPACK例程实现的,该例程计算一般方阵的特征值和特征向量。

数瓦特是的特征值一个,如果存在一个矢量 v,使得。因此,该阵列一个,瓦特,并且 v满足式 为。dot(a,v) = w * vdot(a[:,:], v[:,i]) = w[i] * v[:,i]我在\ {0,…,M-1 }

特征向量的阵列v可能不具有最大等级,即,一些列可能是线性相关的,尽管舍入误差可能使该事实模糊。如果特征值都不同,那么理论上特征向量是线性无关的。同样,特征向量的(复值)矩阵v是酉如果基质一个是正常的,即,如果,其中AH表示的共轭转置一个。dot(a, a.H) = dot(a.H, a)

最后,需要强调的是v组成的右侧(如右侧)的特征向量一个。载体ÿ满足 某些数目ž被称为左侧 的特征向量一个,并且,在一般情况下,矩阵的左和右本征向量不一定彼此的(可能共轭)调换。dot(y.T, a) = z * y.T

参考

G. Strang,Linear Algebra and Applications,2nd Ed。,Orlando,FL,Academic Press,Inc.,1980,Various pp。

例子

from numpy import linalg as LA

(几乎)具有真实e值和电子矢量的微不足道的例子。

w, v = LA.eig(np.diag((1, 2, 3)))
w; v
array([ 1., 2., 3.])
array([[ 1., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.]])

具有复杂e值和电子矢量的真实矩阵; 注意,e值是彼此的复共轭。

w, v = LA.eig(np.array([[1, -1], [1, 1]]))
w; v
array([ 1. + 1.j, 1. - 1.j])
array([[ 0.70710678+0.j , 0.70710678+0.j ],
[ 0.00000000-0.70710678j, 0.00000000+0.70710678j]])

具有实际e值的复值矩阵(但是复值e向量); 注意a.conj()。T = a,即a是Hermitian。

a = np.array([[1, 1j], [-1j, 1]])
w, v = LA.eig(a)
w; v
array([ 2.00000000e+00+0.j, 5.98651912e-36+0.j]) # i.e., {2, 0}
array([[ 0.00000000+0.70710678j, 0.70710678+0.j ],
[ 0.70710678+0.j , 0.00000000+0.70710678j]])

关于舍入错误要小心!

a = np.array([[1 + 1e-9, 0], [0, 1 - 1e-9]])
#Theor. e-values are 1 +/- 1e-9
w, v = LA.eig(a)
w; v
array([ 1., 1.])
array([[ 1., 0.],
[ 0., 1.]])

猜你喜欢

转载自blog.csdn.net/m0_37075274/article/details/89921315
今日推荐