1.4. 特征值与特征向量¶
如何选择线性空间的基, 使得线性变换在该基下的矩阵表示最为简单. 涉及 特征值(eigenvalue) 与特征向量(eigenvector)
1.4.1. 特征值与特征向量¶
线性变换的特征值与特征向量¶
设 是数域 上的线性空间 上的线性变换, 且对于数域 中的数 , 若存在非零向量 满足如下条件
则称 为 的 特征值 , 为 的属于特征值 的特征向量.
注解
由上述定义知:
线性变换不改变特征向量的方向
特征值被特征向量唯一确定, 特征向量不被特征值唯一确定( )
矩阵的特征值与特征向量¶
设有矩阵 , 且对于数域 中的数 , 若存在非零向量 满足如下条件
则称 为矩阵 的 特征值 , 为 的属于特征值 的特征向量.
特征值与特征向量的关系¶
注解
特征值被特征向量唯一确定, 特征向量不被特征值唯一确定( )
互不相同的特征值对应的特征向量线性无关
实例¶
编程生成二维平面 中的点, 这些点落在一个椭圆内, 长轴为 , 短轴为 , 如 图 1.5 所示, 其主要的方向有两个, 长轴方向(红色), 短轴方向(蓝).
对这些二维数据做主成分分析 ( Principal Component Analysis, PCA), 可得两个主要方向:
零均值化数据
计算数据的协方差(即两个维度间的)
计算协方差矩阵的特征值与特征向量
警告
注意这里是对数据的协方差矩阵作特征值分解, 是否可以不求协方差矩阵直接对原始数据矩阵进行分析得到主方向. 特征值特征向量是针对变换矩阵而言的, 对数据矩阵是否有相关理论.
实现代码, 参见文件 demo_eigen_ellipse.py .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | import pytool
import numpy as np
import matplotlib.pyplot as plt
# =====================generate Ellipse=====================
a = 6 # major axis
b = 2 # minor axis
x0 = 10 # center x0
y0 = 10 # center y0
N = 1000 # number of points
# angle for rotating ellipse data
theta = np.pi * 30 / 180
x, y = pytool.ellipse_surface(a, b, x0, y0, N, 'rand')
# x, y = pytool.ellipse_surface(a, b, x0, y0, N, 'order')
x = x - np.mean(x)
y = y - np.mean(y)
xse = [min(x), max(x)]
yse = [min(y), max(y)]
xy = np.array([x, y])
print(xy.shape)
A = xy
# ========================rotate============================
# ------------rotating matrix(Anti-clockwise)---------------
M = [[np.cos(theta), np.sin(theta)],
[-np.sin(theta), np.cos(theta)]]
M = [[np.cos(theta), -np.sin(theta)],
[np.sin(theta), np.cos(theta)]]
print("rotating matrix M: ", M)
# -----------------------rotating---------------------------
A = np.dot(M, A)
x = A[0]
y = A[1]
# ========================show data=========================
plt.figure()
plt.scatter(x, y, c='g', marker='o')
plt.grid()
# ==================Eigenvalue decomposition================
AAT = np.dot(A, A.transpose())
ATA = np.dot(A.transpose(), A)
evalues, evectors = np.linalg.eig(AAT)
# evalues, evectors = np.linalg.eig(ATA)
print(A.shape, AAT.shape, evalues.shape, evectors.shape)
print(AAT)
print("evalues: ", evalues, "evectors: ", evectors)
angle1 = np.arctan(evectors[1, 0] / evectors[0, 0]) * 180 / np.pi
angle2 = np.arctan(evectors[1, 1] / evectors[0, 1]) * 180 / np.pi
print(angle1, angle2)
# =====================plot eigen vector=====================
colorlines = ['-r', '-b']
pytool.plot_vectors2d(evectors.transpose(), xse=xse, yse=yse,
nPoints=N, title='eigen vectors', colorlines=colorlines)
plt.legend(['eigen vector1', 'eigen vector2'])
plt.show()
plt.figure()
plt.imshow(AAT)
plt.show()
|
1.4.2. 广义特征向量¶
计算步骤¶
写出特征多项式矩阵
令特征多项式矩阵对应的行列式的值为
求解得特征值
对于单重特征值: 代入方程组 , 求解特征向量.
对于多重特征值: 代入方程组 , 求解广义特征向量.
1.4.3. 例子(广义特征向量)¶
注解
求如下矩阵的特征值与特征向量/广义特征向量
解:
特征多项式矩阵为
可使用初等变换稍微化简, 方便求行列式的值
求解 的解为
由 求解出对应于 的特征向量 , 由 , 求解广义特征向量 ,
1.4.4. 特征多项式与最小多项式¶
特征多项式¶
设 是 中的线性变换, 是线性空间 中的基, 在该基下的矩阵为 , 再设 为 的属于特征值 的特征向量, 则由 知
从而有
由 知, 不全为零, 从而方程组有非零解, 则
设有数域 上的 阶方阵 , 变量 , 矩阵 的 特征矩阵 的行列式 称为矩阵 的 特征多项式 . 记为 , 其根 为 的 特征值 , 非零解向量 : 为 的属于特征值 的 特征向量 .
注解
线性变换 的特征值与特征向量, 与 的矩阵 的特征值与特征向量一一对应:
与 的特征值一致
的特征向量在基下的坐标与 的特征向量一致
线性变换 的矩阵 的特征多项式与基的选择无关
即, 若 为 在基 下的矩阵, 为矩阵 的属于特征值 的特征向量, 则
是 的特征值
是 的属于特征值 的特征向量
线性变换 的矩阵 的特征多项式与基的选择无关
阶矩阵 是其特征多项式 的矩阵根. 即若有
则
最小多项式¶
定义: 首项系数是1, 次数最小, 且以矩阵 为根的 的多项式, 称为 的 最小多项式 (MinimalPolynomial) , 常用 表示.
1.4.5. 特征子空间与不变子空间¶
什么是特征子空间¶
定义: 设 是线性空间 的线性变换, 是 的一个特征值, 称 的子空间 是 的属于 的 特征子空间 (Characteristic Subspace) , 其中
提示
特征子空间是线性子空间
特征子空间是由特征向量加上零向量构成的子空间.
什么是不变子空间¶
若 是线性空间 的线性变换, 是 的子空间, 且 , 有 , 则称 是 的 不变子空间 (Invariant Subspace).
1.4.6. 信号子空间与噪声子空间¶
在数字信号处理领域经常定义 信号子空间 (Signal Subspace) 与 噪声子空间 (Noise Subspace)