Я реализовал простой метод степеней в 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?