Pour vous pouvez utiliser la représentation
( a - 3 b b a ) L'
addition fonctionne évidemment. Pour la multiplication, vous pouvez vérifier
( a 1 - 3 b 1 b 1 a 1 ) ( a 2 - 3 b 2 b 2 a 2 ) = ( a 1 a 2 - 3 b 1 b 2 - 3 ( a 1 ba + b - 3---√
( unb- 3 bune)
qui préserve la représentation, nous avons donc un homomorphisme cyclique.
( un1b1- 3 b1une1) ( a2b2- 3 b2une2) = ( a1une2- 3 b1b2une1b2+ b1une2- 3 ( a1b2+b1une2)une1une2- 3b1b2)
La prise du déterminant de la matrice donne la norme (au carré) , donc les inverses correspondent aux matrices inverses, comme prévu.une2+ 3 b2
Vous avez déjà envisagé d'utiliser des triplets , par lesquels je suppose que vous utiliseriez des entiers et un dénominateur commun. Cette approche peut également être utile dans la représentation matricielle.
Mise à jour : une méthode générale pour les représentations matricielles utilise la matrice associée . Par exemple, supposons que vous vouliez représenter place où
ω = exp ( 2 π ia + b ω, doncω2+ω+1=0. La matrice compagnon deωest( 0 - 1 1 - 1 ), et cela se comporte dans toutes ses opérations d'anneau associées commeωlui-même. Bien sûr,1peut être représenté par( 1 0 0 1 ); donc une représentation matricielle dea+bωest
( a - b b a - b )ω = exp( 2 πje3)ω2+ ω + 1 = 0ω( 01- 1- 1)ω1( 1001)a + b ω
( unb- ba - b)
Vous voudrez peut-être vérifier qu'il s'agit d'un homomorphisme en anneau. De plus, cela est facile à voir. Pour la multiplication, les formules correspondantes sont maintenant
( un1+ b1ω ) ( a2+ b2ω )( un1b1- b1une1- b1) ( a2b2- b2une2- b2)= ( a1une2- b1b2) + ( a1b2+ b1une2- b1b2) ω= ( a1une2- b1b2une1b2+ b1une2- b1b2- ( a1b2+ b1une2- b1b2)une1une2- un1b2- b1une2)
numpy
opérations matricielles accélérées avec celles des types de données définis par l'utilisateur. Je ne sais pas quel serait le gagnant.