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?

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)

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.