Решение A * x = x с помощью numpy - PullRequest
0 голосов
/ 08 мая 2020

Я новичок в numpy и хочу решить уравнение A * x = x, где A - матрица, а x - вектор.

Поиск вектора x, если он существует.

Я нашел np.linalg.solve() -функцию, но не смог заставить ее работать должным образом.

1 Ответ

4 голосов
/ 08 мая 2020

Проблема здесь не столько в numpy, сколько в вашем понимании вовлеченной линейной алгебры. Вопрос, который вы задаете, можно перефразировать так:

A @ x = x
A @ x = I @ x
(A - I) @ x = 0

Это конкретная c формулировка общей задачи собственный вектор с оговоркой, что собственное значение равно 1.

Numpy решает эту проблему с помощью функции np.linalg.eig:

w, v = np.linalg.eig(A)

Вам нужно проверить, равно ли какое-либо из значений 1 (их может быть больше одного):

mask = np.isclose(w, 1)
if mask.any():
    for vec in v[:, mask].T:
        print(vec)
else:
    print('Nope!')

Элементы v являются единичными векторами. Имейте в виду, что любое скалярное кратное такого вектора также является решением.

Для проблем с необратимыми матрицами вы можете вместо этого использовать scipy.linalg.svd:

v, w, _ = svd(A)

Дальнейшая процедура будет такой же.

...