特征值很复杂,除了普通的特征向量外,还有左特征向量和广义特征向量。先说说比较容易的左特征向量吧。它是这样定义的,
A
A
A是一个矩阵,
λ
\lambda
λ是它的一个特征值,下面的向量
y
y
y就是矩阵关于特征值的左特征向量left eigenvector:
y
H
A
=
λ
y
H
y^HA=\lambda y^H
yHA=λyH
以这个矩阵为例子:
(
2
0
0
1
1
0
1
1
2
)
\begin{pmatrix}2 & 0 & 0\\ 1 & 1 & 0\\ 1 & 1 & 2\\ \end{pmatrix}
211011002
它的特征多项式是
(
λ
−
2
)
2
(
λ
−
1
)
(\lambda - 2)^2(\lambda - 1)
(λ−2)2(λ−1),所以特征值是
2
,
2
,
1
2,2,1
2,2,1。以
1
1
1这个特征值为例子,求它的左特征向量:
y
H
(
2
0
0
1
1
0
1
1
2
)
=
y
H
y^H\begin{pmatrix}2 & 0 & 0\\ 1 & 1 & 0\\ 1 & 1 & 2\\ \end{pmatrix}=y^H
yH
211011002
=yH
这就是解方程了:
(
y
1
y
2
y
3
)
(
2
0
0
1
1
0
1
1
2
)
=
(
y
1
y
2
y
3
)
\begin{pmatrix} y_1 & y_2 & y_3 \end{pmatrix} \begin{pmatrix}2 & 0 & 0\\ 1 & 1 & 0\\ 1 & 1 & 2\\ \end{pmatrix}=\begin{pmatrix} y_1 & y_2 & y_3 \end{pmatrix}\\
(y1y2y3)
211011002
=(y1y2y3)
其实这个方程可以改写为:
(
2
1
1
0
1
1
0
0
2
)
y
=
y
y
=
(
−
1
1
0
)
\begin{pmatrix}2 & 1 & 1\\ 0 & 1 & 1\\ 0 & 0 & 2\\ \end{pmatrix}y=y\\ y=\begin{pmatrix} -1\\ 1\\ 0 \end{pmatrix}
200110112
y=yy=
−110
所以A的左特征向量其实就是
A
H
A^H
AH的特征向量。所以求左特征向量的python代码也比较容易:
# 特征向量
def eigen_vector(self, eigen_value):
n = len(self.__vectors)
a = Matrix(Matrix.unit_matrix(n)) * eigen_value
return (self-a).non_homogeneous_solution([0] * n)[1:]
# 左特征向量
def left_eigen_vector(self, eigen_value):
return self.transpose_matrix().eigen_vector(eigen_value)