Dla a + b- 3---√ możesz użyć reprezentacji
(zab- 3 bza)
Dodawanie działa oczywiście. W celu pomnożenia możesz zweryfikować
(za1b1- 3b1za1) (za2)b2)- 3b2)za2)) = (za1za2)- 3b1b2)za1b2)+b1za2)- 3 (za1b2)+b1za2))za1za2)- 3b1b2))
która zachowuje reprezentację, a zatem mamy homomorfizm pierścieniowy.
Biorąc wyznacznik macierzy daje (kwadrat) normę za2)+ 3b2), zatem odwrotność odpowiada odwrotnym macierzom, zgodnie z oczekiwaniami.
Rozważałeś już użycie potrójnych , przy których zakładam, że użyłbyś liczb całkowitych i wspólnego mianownika. Takie podejście może być również przydatne w reprezentacji macierzowej.
Aktualizacja : Ogólna metoda reprezentacji macierzy wykorzystuje macierz towarzyszącą . Załóżmy na przykład, że chcesz reprezentowaća + b ω zamiast tego gdzie
ω = exp(2 πja3))w ten sposób ω2)+ ω + 1 = 0. Macierz towarzyszącaω jest (01−1−1), i zachowuje się to we wszystkich powiązanych operacjach pierścienia, takich jak ωsamo. Oczywiście,1 może być reprezentowany jako (1001); dlatego macierzowa reprezentacjaa+bω jest
(ab−ba−b)
Możesz sprawdzić, czy jest to homomorfizm pierścieniowy. Ponadto łatwo to zobaczyć. W przypadku mnożenia odpowiednie formuły są teraz
(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
przyspieszonych operacji macierzowych z wydajnością typów danych zdefiniowanych przez użytkownika. Nie jestem pewien, kto byłby zwycięzcą.