Darstellung von Eisenstein-Zahlen ohne Schwimmer

9

Ich habe ein Projekt, in dem ich quadratische Felder verwenden muss. Speziell Zahlen der Form mita,bQ.a+b3a,bQ

Zum Beispiel sind hier die Primzahlen in Eisenstein-Ganzzahlen :

Ich möchte keinen Salbei verwenden. Ich möchte meinen eigenen Datentyp schreiben, um ihn einzubeziehen numpy. PARI wäre nützlich - aber es ist nicht kompatibel mit Python.

  • Die Addition für diese Objekte ist ziemlich klar
    (a1+b13)+(a2+b23)=(a1+a2)+(b1+b2)3
  • Die Multiplikation ist etwas heikler, aber wir können sie auch hart codieren
    (a1+b13)×(a2+b23)=(a1a23b1b2)+(a1b2+a2b1)3
  • Mein Datentyp muss auch die Teilung berücksichtigen. Nehmen wir der Einfachheit halber das Gegenteil:
    1a+b3=ab3a2+3b2

Gibt es eine natürliche matrixbasierte Methode zum Codieren dieser Operationen, ähnlich wie in Form von 2 × 2- Matrizen geschrieben werden kann?C2×2

(abba)

Vielleicht werde ich die Operationen mit den drei oben beschriebenen Operationen nur dreifach fest codieren. Irgendwelche Ideen?

John Mangual
quelle

Antworten:

10

Für a+b3

(a3bba)
(a13b1b1a1)(a23b2b2a2)=(a1a23b1b23(a1b2+b1a2)a1b2+b1a2a1a23b1b2)

a2+3b2

Sie haben bereits überlegt, Tripel zu verwenden , von denen ich annehme , dass Sie Ganzzahlen und einen gemeinsamen Nenner verwenden würden. Dieser Ansatz kann auch in der Matrixdarstellung nützlich sein.

a+bωω=exp(2πi3)ω2+ω+1=0ω(0111)ω1(1001)a+bω

(abbab)
(a1+b1ω)(a2+b2ω)=(a1a2b1b2)+(a1b2+b1a2b1b2)ω(a1b1b1a1b1)(a2b2b2a2b2)=(a1a2b1b2(a1b2+b1a2b1b2)a1b2+b1a2b1b2a1a2a1b2b1a2)
ccorn
quelle
2

Ich vermute, Sie wollen für alles eine exakte rationale Arithmetik, da Gleitkommafehler könnten1/zQ[3]z

Unabhängig davon, wie Sie die Elemente Ihres Feldes darstellen, können Sie Operatoren in Python mit "magischen Methoden" überladen . Siehe auch diesen SO-Beitrag zum Erstellen eines eigenen numerischen Typs in Python.

Ich glaube nicht, dass es so viel mehr Arbeit geben würde, eine Darstellung eines Elements eines quadratischen Feldes entweder als 2 x 2-Matrix rationaler Zahlen oder als Paar rationaler Zahlen zu codieren, da die arithmetischen Operationen nicht so kompliziert sind. Ich vermute jedoch, dass der zweite Ansatz schneller sein wird.

Daniel Shapero
quelle
1
Es kann interessant sein, die praktische Leistung von numpybeschleunigten Matrixoperationen mit denen von benutzerdefinierten Datentypen zu vergleichen. Ich bin mir nicht sicher, was der Gewinner sein würde.
Ccorn
Ja, das stimmt, Numpy hat viele handcodierte Cython + -Optimierungen auf der C-Seite, um die Dinge schneller zu machen. Sie müssten einiges davon selbst wiederholen, um den gleichen Effekt zu erzielen. Trotzdem sollte die Funktionalität an erster Stelle stehen und später kann man sich um die Geschwindigkeit sorgen.
Daniel Shapero