Метод Power не работает для симметричных матриц - PullRequest
0 голосов
/ 26 ноября 2018

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

1 Ответ

0 голосов
/ 27 ноября 2018

Я думаю, что проблема в векторе, который вы использовали для инициализации x0 = [1,1] Если вы запускаете метод Power с x0 = [-1, 1] или [1, -1], вы должны получить наибольшее собственное значение:3 после 3 итераций, если ваш допуск составляет 0,0001

...