幂法不适用于对称矩阵
Power Method doesn't work for symmetric matrices
我在 Python 3.7 中实现了一个简单的幂法,它应该计算给定矩阵的最大特征值:
def power(A, x0, num_iter):
""" A - matrix, x0 - initial approximation of eigenvector,
num_iter - number of iteration"""
x = x0
l = x.T @ A @ x
for i in range(num_iter):
y = A @ x
x = y / np.linalg.norm(y)
l = x.T @ (A @ x)
return l
当我尝试计算具有两个特征值 3 和 1 的简单对称矩阵的特征值时:
test_matrix = numpy.array([[2, -1],[-1, 2]])
我得到了:
In1: test_matrix, np.array([1, 1]), 100
Out1: 1
为什么我的算法在这种情况下不收敛到最大的特征值,即 3?
我认为问题出在你用于初始化的向量 x0 = [1,1]
如果您 运行 具有 x0 = [-1, 1] 或 [1, -1] 的 Power 方法,如果您的公差为 0.0001
,那么在 3 次迭代后,您应该得到最大的特征值为 3
我在 Python 3.7 中实现了一个简单的幂法,它应该计算给定矩阵的最大特征值:
def power(A, x0, num_iter):
""" A - matrix, x0 - initial approximation of eigenvector,
num_iter - number of iteration"""
x = x0
l = x.T @ A @ x
for i in range(num_iter):
y = A @ x
x = y / np.linalg.norm(y)
l = x.T @ (A @ x)
return l
当我尝试计算具有两个特征值 3 和 1 的简单对称矩阵的特征值时:
test_matrix = numpy.array([[2, -1],[-1, 2]])
我得到了:
In1: test_matrix, np.array([1, 1]), 100
Out1: 1
为什么我的算法在这种情况下不收敛到最大的特征值,即 3?
我认为问题出在你用于初始化的向量 x0 = [1,1] 如果您 运行 具有 x0 = [-1, 1] 或 [1, -1] 的 Power 方法,如果您的公差为 0.0001
,那么在 3 次迭代后,您应该得到最大的特征值为 3