Для a+b−3−−−√ ви можете використовувати представлення
(ab−3ba)
Додавання працює очевидно. Для множення ви можете перевірити
(a1b1−3b1a1)(a2b2−3b2a2)=(a1a2−3b1b2a1b2+b1a2−3(a1b2+b1a2)a1a2−3b1b2)
що зберігає уявлення, таким чином, ми маємо кільцевий гомоморфізм.
Прийняття визначника матриці дає (квадрат) норму a2+3b2, таким чином, взаємні відповіді відповідають зворотним матрицям, як і очікувалося.
Ви вже розглядали можливість використання трійки , за якою я припускаю, що ви використовуєте цілі числа та спільний знаменник. Цей підхід може бути корисним і для матричного подання.
Оновлення : загальний метод представлення матриць використовує супутню матрицю . Наприклад, припустимо, що ви хочете представлятиa+bω замість того, де
ω=exp(2πi3), таким чином ω2+ω+1=0. Супутня матрицяω є (01−1−1), і це поводиться у всіх пов'язаних з ним операціях кільця, як ωсебе. Звичайно,1 може бути представлений як (1001); тому матричне зображенняa+bω є
(ab−ba−b)
Ви можете переконатися, що це кільцевий гомоморфізм. Крім того, це легко помітити. Для множення відповідні формули тепер є
(a1+b1ω)(a2+b2ω)(a1b1−b1a1−b1)(a2b2−b2a2−b2)=(a1a2−b1b2)+(a1b2+b1a2−b1b2)ω=(a1a2−b1b2a1b2+b1a2−b1b2−(a1b2+b1a2−b1b2)a1a2−a1b2−b1a2)
numpy
-accelerated matrix ops with those of user-defined data types. Not sure about what the winner would be.