【发布时间】:2018-11-26 08:30:13
【问题描述】:
我在 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?
【问题讨论】:
-
您为 x 选择的初始值是特征值为 1 的特征向量,因此在完美算术中,您的迭代将始终停留在该特征空间中。这是幂法的问题之一。
标签: python linear-algebra eigenvalue