Numpy Определитель матрицы не работает, как ожидалось? - PullRequest
0 голосов
/ 30 января 2020

У меня есть вопрос, в котором меня просят показать, что определитель матрицы B равен 0. Матрица B определяется как:

import numpy as np
from numpy import linalg as m

B = np.array([[-1-3.j,-8-10.j,0-3.j], 
                [-7-3.j,-4-9.j,-3-2.j], 
                [11-3.j,-16-12.j,6-5.j] 
              ])
print(B)
[[ -1. -3.j  -8.-10.j   0. -3.j]
 [ -7. -3.j  -4. -9.j  -3. -2.j]
 [ 11. -3.j -16.-12.j   6. -5.j]]

Определитель является простым, используя numpy

m.linalg.det(B)
(-8.126832540256171e-14-1.5987211554602298e-14j)

Что явно не равно нулю.

Я дважды проверил свой ответ, используя https://www.symbolab.com/, и определитель определенно равен нулю.

Я чувствую, что делаю что-то смехотворно глупое, но не могу понять, что именно. Любая помощь?

Ответы [ 2 ]

2 голосов
/ 30 января 2020

То, что вы видите, это действительно крошечные числа, которые почти равны нулю. Они не совсем равны нулю только из-за числовых неточностей.

Именно поэтому мы обычно проверяем их не на равенство, а на близость

np.allclose(np.linalg.det(B), 0). # True
0 голосов
/ 30 января 2020

Чтобы немного расширить Nils ответ:

Существуют различные способы вычисления определителей. Способ преподавания на уроках алгебры - расширение Лапласа - является разумным способом go для небольших (например, 3 x 3) матриц, но быстро становится невозможным - из-за необходимого количества вычислений - - для больших матриц.

В вашем случае, когда все действительные и мнимые части представляют собой маленькие целые числа, такое вычисление будет точно определять определитель, как 0.

In python linalg. В det используется другой подход, при котором матрица разбивается на факторы - матрицы tri angular и перестановки, - детерминанты которых можно легко вычислить, и тогда детерминант продукта является произведением детерминантов факторов. Это кубовое вычисление порядка N, поэтому его можно использовать даже для довольно больших матриц.

Однако такие факторизации (немного) неточны; исходная матрица не будет точно равна произведению. Таким образом, определитель также будет, скорее всего, немного неточным.

...