Недостаток вычисления определителя целоисчисленных матриц на Питоне
Целоисчисленная матрица — это матрица, все элементы которой являются целыми числами.
Определитель целоисчисленной матрицы — тоже целое число. (Очевидно же.)
Используем класс целоисчисленных матриц, элементы которых могут принимать только значения из заданного множества целых чисел. (Такие матрицы называют богемными.)
Очевидно, что если множество возможных элементов матриц конечно, то и число возможных богемных матриц заданного размера тоже конечно.
Пусть мы ищем среди всех богемных матриц только те, определитель которых равен нулю. Ищем при помощи кода на Питоне. Определитель матрицы вычисляем так:
dt = np.linalg.det( a )
И вот тут возможна ошибка.
Если мы будем выбирать матрицы по условию dt==0, то получим неверный результат.
Using that test (dt==0) Python got the right number of [...] matrices when mdim=2 or mdim=3, but the test dt==0 failed a few times when mdim=4, and (after a long time computing) reported 15,015,617 singular matrices; the true number is 15,099,201. This is because np.linalg.det is computing the determinant from a numerical factoring (which introduces rational numbers and rounding error) and the roundoff error means that sometimes a zero determinant was not being reported as precisely zero.
Правильный результат получится если мы используем условие dt<0.5.