方阵特征值与特征向量计算
在许多科学和工程领域中,计算方阵的特征值和特征向量是一个常见的任务。以下是关于如何使用NumPy的linalg.eig
函数进行此操作的详细介绍及其注意事项。
函数定义
import numpy as np
from numpy.linalg import eig
输入参数
a
: 一个形状为(..., M, M)
的数组,表示所要计算特征值和特征向量的方阵。
返回结果
-
w
: 一个形状为(..., M)
的数组,包含特征值。特征值可能是复数类型,除非它的虚部为零,此时它将被转换为实数。对于实数矩阵,特征值要么是实数,要么以共轭对的形式出现。 -
v
: 一个形状为(..., M, M)
的数组,包含归一化的特征向量。数组的列v[:, :, i]
对应于特征值w[i]
。
示例
import numpy as np
from numpy.linalg import eig
# 示例 1: 使用对角矩阵
a1 = np.diag((1, 2, 3))
w1, v1 = eig(a1)
print("特征值:", w1)
print("特征向量:", v1)
# 示例 2: 具有复数特征值的矩阵
a2 = np.array([[1, -1], [1, 1]])
w2, v2 = eig(a2)
print("特征值:", w2)
print("特征向量:", v2)
# 示例 3: Hermitian 矩阵
a3 = np.array([[1, 1j], [-1j, 1]])
w3, v3 = eig(a3)
print("特征值:", w3)
print("特征向量:", v3)
# 示例 4: 舍入误差
a4 = np.array([[1 + 1e-9, 0], [0, 1 - 1e-9]])
w4, v4 = eig(a4)
print("特征值:", w4)
print("特征向量:", v4)
注意事项
-
收敛性: 如果特征值计算不收敛,将引发
LinAlgError
。 -
线性相关性: 特征向量可能并不总是线性无关,即某些列可能是线性相关的。这通常发生在特征值重复时。
-
实数与复数特征值: 对于实数矩阵,特征值将是实数或复共轭的形式。而对于复数矩阵,特征值可以是任意复数。
-
最大等级: 输出的特征向量矩阵
v
不一定是最大等级的,即其列可能是线性相关的。 -
Hermitian 矩阵: 对于正常矩阵(即
A
和A^H
的乘积相等),特征向量矩阵v
是酉的。 -
舍入误差: 在实际计算中,舍入误差可能影响结果。对接近的特征值,应当谨慎评估其有效性。
参考文献
- G. Strang, Linear Algebra and Its Applications, 2nd Ed., Academic Press, 1980.
- NumPy Documentation on
linalg.eig
.
通过此方式,你可以在使用 NumPy 的 linalg.eig
计算特征值和特征向量时更加清晰与高效。