求解特征值和特征向量
scipy.linalg.eig(a,
b=None,
left=False,
right=True,
overwrite_a=False,
overwrite_b=False,
check_finite=True)
a
:一个方阵,形状为(M,M)
。待求解特征值和特征向量的矩阵。
b
:默认为None
,表示求解标准的特征值问题: Ax=λx。 也可以是一个形状与a
相同的方阵,此时表示广义特征值问题: Ax=λBx
left
:一个布尔值。如果为True
,则计算左特征向量
right
:一个布尔值。如果为True
,则计算右特征向量
overwrite_a
:一个布尔值,指定是否将结果写到a
的存储区。
overwrite_b
:一个布尔值,指定是否将结果写到b
的存储区。
check_finite
:如果为True
,则检测输入中是否有nan
或者inf
返回值:
w
:一个一维数组,代表了M
特特征值。
vl
:一个数组,形状为(M,M)
,表示正则化的左特征向量(每个特征向量占据一列,而不是一行)。仅当left=True
时返回
vr
:一个数组,形状为(M,M)
,表示正则化的右特征向量(每个特征向量占据一列,而不是一行)。仅当right=True
时返回
numpy
提供了numpy.linalg.eig(a)
来计算特征值和特征向量
有特征值:Axr=λxr ; 左特征值: 为特征值的共轭。
令 P=[xr1,xr2,⋯,xrM]
Σ=⎣⎢⎢⎡λ10⋮00λ2⋮000⋮0⋯⋯⋱⋯00⋮λM⎦⎥⎥⎤
则有:
AP=PΣ⟹A=PΣP−1
求解问题
linalg.eig(A)
linalg.eigvals(A)
linalg.eig(A, B)
- 求解 Av=λBv 的问题
基本使用
例子
矩阵为:
A=⎣⎡123546212⎦⎤
特征多项式为:
∣A−λI∣==(1−λ)[(4−λ)(2−λ)−6]−5[2(2−λ)−3]+2[12−3(4−λ)]−λ3+7λ2+8λ−3
特征根为:
λ1=7.9579λ2=−1.2577λ3=0.2997
求解特征值和特征向量
⎣⎡123546212⎦⎤
import numpy as np
from scipy.linalg import eig
a = np.array([[1,5,2],[2,4,1],[3,6,2]])
w,vr=eig(a,right=True)
print(w)
print(vr)
结果:
# 每一个为一个特征值
[ 7.9579162 +0.j -1.25766471+0.j 0.2997485 +0.j]
# 每一列对应一个特征值的特征向量
[[-0.5297175 -0.90730751 0.28380519]
[-0.44941741 0.28662547 -0.39012063]
[-0.71932146 0.30763439 0.87593408]]