เป็นตัวแทนของตัวเลข Eisenstein โดยไม่ต้องลอย


9

ผมมีโครงการที่ฉันจำเป็นต้องใช้เขตการกำลังสอง โดยเฉพาะตัวเลขของแบบฟอร์มกับ{Q}a+b3a,bQ

ตัวอย่างเช่นที่นี่มีจำนวนเฉพาะในจำนวนเต็ม Eisenstein :

ฉันไม่ต้องการใช้ปัญญาชน ฉันต้องการเขียนชนิดข้อมูลของตัวเองเพื่อรวมเข้าnumpyด้วยกัน PARI จะมีประโยชน์ - แต่มันเข้ากันไม่ได้กับ Python

  • ส่วนเพิ่มเติมสำหรับวัตถุเหล่านี้ค่อนข้างชัดเจน
    (a1+b13)+(a2+b23)=(a1+a2)+(b1+b2)3
  • การคูณนั้นละเอียดอ่อนกว่าเล็กน้อย แต่เราก็สามารถเขียนโค้ดได้ยากเช่นกัน
    (a1+b13)×(a2+b23)=(a1a23b1b2)+(a1b2+a2b1)3
  • ประเภทข้อมูลของฉันยังต้องรองรับการแบ่ง เพื่อความเรียบง่ายลองใช้ส่วนกลับ:
    1a+b3=ab3a2+3b2

มีวิธีตามธรรมชาติของเมทริกซ์ในการเข้ารหัสการดำเนินการเหล่านี้คล้ายกับสามารถเขียนในรูปแบบของเมทริกซ์หรือไม่?C2×2

(abba)

บางทีฉันอาจจะยากรหัสการดำเนินงานเป็นสามเท่ากับสามการดำเนินงานที่ระบุไว้ข้างต้น ความคิดใด ๆ

คำตอบ:


10

สำหรับคุณสามารถใช้การแทน เติมจะทำงานได้อย่างชัดเจน สำหรับการคูณคุณสามารถยืนยัน ซึ่งเก็บรักษาการแทนไว้ดังนั้นเราจึงมีวงแหวน homomorphisma+b3

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

การหาดีเทอร์มีแนนต์ของเมทริกซ์จะให้ค่าปกติ (กำลังสอง)ดังนั้นการแลกเปลี่ยนกลับจะสอดคล้องกับเมทริกซ์ผกผันตามที่คาดไว้a2+3b2

คุณได้พิจารณาใช้triplesแล้วโดยที่ฉันคิดว่าคุณจะใช้จำนวนเต็มและตัวส่วนร่วม วิธีการนั้นอาจมีประโยชน์ในการแทนเมทริกซ์เช่นกัน

ปรับปรุง : วิธีการทั่วไปของการแสดงเมทริกซ์ใช้เมทริกซ์สหาย ตัวอย่างเช่นสมมติว่าคุณต้องการแสดงแทนโดยที่ ดังนั้น . เมทริกซ์ที่เป็นคู่หูของคือและสิ่งนี้จะทำงานในการปฏิบัติการวงแหวนทั้งหมดที่เกี่ยวข้องเช่นเอง แน่นอนสามารถแสดงเป็น ; ดังนั้นการแสดงเมทริกซ์ของคือ 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

ฉันเดาว่าคุณต้องการเลขคณิตเชิงเหตุผลที่ถูกต้องสำหรับทุกสิ่งเนื่องจากข้อผิดพลาดของจำนวนจุดลอยตัวอาจทำให้ไม่อยู่ในแม้ว่าคือ เพื่อที่คุณอาจต้องการดูแพคเกจSymPy ; หากคุณไม่ได้ใช้ประเภทข้อมูลที่มีเหตุผลโดยตรงอาจเป็นแรงบันดาลใจให้กับเวอร์ชันที่รีดด้วยมือของคุณเอง จากนั้นคุณสามารถสร้างประเภทของสมการกำลังสองด้านบนของประเภทจำนวนตรรกยะที่คุณเลือก1/zQ[3]z

ไม่ว่าคุณจะเป็นตัวแทนองค์ประกอบของฟิลด์ของคุณอย่างไรคุณสามารถโอเวอร์โหลดโอเปอเรเตอร์ใน Python ได้โดยใช้ ดูโพสต์ SO นี้ในการสร้างประเภทตัวเลขของคุณเองใน Python

ฉันไม่คิดว่ามันจะมีงานเขียนอีกมากมายที่เป็นตัวแทนขององค์ประกอบของสมการกำลังสองไม่ว่าจะเป็นเมทริกซ์จำนวนตรรกยะ 2 x 2 หรือเป็นคู่ของจำนวนตรรกยะเนื่องจากการดำเนินการทางคณิตศาสตร์นั้นไม่ซับซ้อน อย่างไรก็ตามฉันสงสัยว่าวิธีที่สองจะเร็วขึ้น


1
มันอาจจะน่าสนใจที่จะเปรียบเทียบประสิทธิภาพในทางปฏิบัติของnumpyเมทริกซ์ -opelerated matrix กับชนิดข้อมูลที่ผู้ใช้กำหนดเอง ไม่แน่ใจเกี่ยวกับสิ่งที่ผู้ชนะจะเป็น
ccorn

ใช่นั่นเป็นเรื่องจริง numpy มี Cython + จำนวนมากที่ปรับแต่งด้วยมือด้าน C เพื่อทำให้สิ่งต่าง ๆ เร็วขึ้น คุณต้องทำซ้ำสิ่งนั้นด้วยตัวคุณเองเพื่อให้ได้ผลเช่นเดียวกัน อย่างไรก็ตามฟังก์ชั่นควรมาก่อนและหลังจากนั้นหนึ่งสามารถกังวลเกี่ยวกับความเร็ว
Daniel Shapero
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.