scipy.linalg.eig¶
- scipy.linalg.eig(a, b=None, left=False, right=True, overwrite_a=False, overwrite_b=False, check_finite=True, homogeneous_eigvals=False)[源代码]¶
求解方阵的普通或广义特征值问题。
查找一般矩阵的特征值w和右或左特征向量:
a vr[:,i] = w[i] b vr[:,i] a.H vl[:,i] = w[i].conj() b.H vl[:,i]
哪里
.H
是厄米特共轭。- 参数
- a(M,M)类数组
将计算其特征值和特征向量的复矩阵或实矩阵。
- b(M,M)array_like,可选
广义特征值问题中的右手边矩阵。默认值为None,假定为标识矩阵。
- left布尔值,可选
是否计算并返回左特征向量。默认值为False。
- right布尔值,可选
是否计算并返回右特征向量。默认值为True。
- overwrite_a布尔值,可选
是否覆盖 a ;可以提高性能。默认值为False。
- overwrite_b布尔值,可选
是否覆盖 b ;可以提高性能。默认值为False。
- check_finite布尔值,可选
是否检查输入矩阵是否仅包含有限个数字。禁用可能会带来性能提升,但如果输入确实包含无穷大或NAN,则可能会导致问题(崩溃、非终止)。
- homogeneous_eigvals布尔值,可选
如果为True,则返回齐次坐标中的特征值。在这种情况下
w
是(2,M)数组,因此::w[1,i] a vr[:,i] = w[0,i] b vr[:,i]
默认值为False。
- 退货
- w(M,)或(2,M)双或复数ndarray
特征值,每个特征值根据其重数重复。形状为(M,),除非
homogeneous_eigvals=True
。- vl(M,M)双或复数ndarray
与特征值对应的归一化左特征向量
w[i]
是列VL [:,i] 。仅在以下情况下返回left=True
。- vr(M,M)双或复数ndarray
与该特征值对应的归一化右特征向量
w[i]
是该列vr[:,i]
。仅在以下情况下返回right=True
。
- 加薪
- LinAlgError
如果特征值计算不收敛。
参见
eigvals
一般阵列的特征值
eigh
对称/厄米特阵列的特征值和右特征向量。
eig_banded
对称/厄米特带状矩阵的特征值和右特征向量
eigh_tridiagonal
对称/厄米特三对角阵的特征值和右本征向量
示例
>>> from scipy import linalg >>> a = np.array([[0., -1.], [1., 0.]]) >>> linalg.eigvals(a) array([0.+1.j, 0.-1.j])
>>> b = np.array([[0., 1.], [1., 1.]]) >>> linalg.eigvals(a, b) array([ 1.+0.j, -1.+0.j])
>>> a = np.array([[3., 0., 0.], [0., 8., 0.], [0., 0., 7.]]) >>> linalg.eigvals(a, homogeneous_eigvals=True) array([[3.+0.j, 8.+0.j, 7.+0.j], [1.+0.j, 1.+0.j, 1.+0.j]])
>>> a = np.array([[0., -1.], [1., 0.]]) >>> linalg.eigvals(a) == linalg.eig(a)[0] array([ True, True]) >>> linalg.eig(a, left=True, right=False)[1] # normalized left eigenvector array([[-0.70710678+0.j , -0.70710678-0.j ], [-0. +0.70710678j, -0. -0.70710678j]]) >>> linalg.eig(a, left=False, right=True)[1] # normalized right eigenvector array([[0.70710678+0.j , 0.70710678-0.j ], [0. -0.70710678j, 0. +0.70710678j]])