Я получаю обратную матрицу, даже если определитель равен нулю - PullRequest
0 голосов
/ 29 марта 2019

Я получаю обратную матрицу, даже если определитель равен нулю.Я пытался с кодом ниже:

import numpy as np
from scipy import linalg
matrix=np.array([[5,10],[2,4]])
print(linalg.det(matrix))
linalg.inv(matrix)

1 Ответ

0 голосов
/ 29 марта 2019

Проблема здесь в том, что разные процедуры вычисляют матричный определитель. Например:

import numpy as np
matrix=np.array([[5.,10.],[2.,4.]])
print(np.linalg.det(matrix))
print(np.linalg.slogdet(matrix))

try:
    invmatrix=np.linalg.inv(matrix)

except np.linalg.LinAlgError:
    print("inversion failed")

не выдает исключений и печатает это:

-1.1102230246251625e-15
(-1.0, -34.43421547668305)    

т.е. отсутствие прямого алгебраического вычисления определителя (что делает scipy.linalg.det) дает ненулевой определитель из-за накопленной ошибки округления с плавающей запятой. Таким образом, стандартные процедуры линейной алгебры рассматривают матрицу как неособую и производят неправильную обратную сторону из крайне плохой условной задачи.

(протестировано с простой версией 1.15.4 и scipy версией 1.1.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...