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


9

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

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

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

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

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

(ab−ba)

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

คำตอบ:


10

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

(a−3bba)
(a1−3b1b1a1)(a2−3b2b2a2)=(a1a2−3b1b2−3(a1b2+b1a2)a1b2+b1a2a1a2−3b1b2)

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

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

ปรับปรุง : วิธีการทั่วไปของการแสดงเมทริกซ์ใช้เมทริกซ์สหาย ตัวอย่างเช่นสมมติว่าคุณต้องการแสดงแทนโดยที่ ดังนั้น . เมทริกซ์ที่เป็นคู่หูของคือและสิ่งนี้จะทำงานในการปฏิบัติการวงแหวนทั้งหมดที่เกี่ยวข้องเช่นเอง แน่นอนสามารถแสดงเป็น ; ดังนั้นการแสดงเมทริกซ์ของคือ a+bωω=exp⁡(2πi3)ω2+ω+1=0ω(0−11−1)ω1(1001)a+bω

(a−bba−b)
คุณอาจต้องการตรวจสอบว่านี่คือวงแหวนโฮโมมอร์ฟิซึม นอกจากนี้มันเป็นเรื่องง่ายที่จะเห็น สำหรับการคูณสูตรที่เกี่ยวข้องตอนนี้
(a1+b1ω)(a2+b2ω)=(a1a2−b1b2)+(a1b2+b1a2−b1b2)ω(a1−b1b1a1−b1)(a2−b2b2a2−b2)=(a1a2−b1b2−(a1b2+b1a2−b1b2)a1b2+b1a2−b1b2a1a2−a1b2−b1a2)

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.