Я пытаюсь написать код для дешифрования текста Hill Cipher. Нас учили, как это делать вручную, когда мы используем линейную алгебру. Мой код нуждается во мне, чтобы найти обратную квадратную матрицу.
Допустим, я делаю это вручную для матрицы 2x2. Если моя матрица:
|1 4 |
|11 11|
Если я найду определитель (мод 26, потому что он все-таки для шифра) и присоединенный к матрице, я в итоге получу:
|121 44|
|-121 11|
Позже я могу найти мод элементов 26, но я пытаюсь сказать, что получу целые числа.
Теперь, чтобы закодировать это, у меня было время, поэтому я решил использовать numpy, чтобы найти обратную матрицу, вместо того, чтобы писать отдельные коды для поиска обратной и присоединенной. Вот что я сделал:
a=[[1,11],[4,11]]
print(linalg.inv(a))
Когда я делаю это вручную,
Я получаю 19 как определитель
Inverse= 1 |11 -4| = 11|11 -4| = |121 -44|
19|-11 1| |-11 1| |-121 11|
(я умножил на 11, потому что модульная обратная 19 равна 11)
Итак, это то, чему нас учили. Но когда я использую вышеупомянутую функцию numpy: я получаю:
[-0.33333333 0.12121212]
[ 0.33333333 -0.03030303]]
пока я ожидал [[121 -44],[-121,11]]
.
Не думаю, что я понял, как работает функция numpy, что дает мне неверный результат. Пожалуйста, помогите мне попытаться понять, что я могу сделать, чтобы получить ожидаемые результаты