Mewakili angka Eisenstein tanpa pelampung


9

Saya punya proyek di mana saya perlu menggunakan bidang kuadrat Khususnya angka dari bentuk dengansebuah,bQ.a+b3a,bQ

Misalnya di sini adalah bilangan prima dalam bilangan bulat Eisenstein :

Saya tidak ingin menggunakan bijak. Saya ingin menulis tipe data saya sendiri untuk dimasukkan numpy. PARI akan bermanfaat - tetapi tidak kompatibel dengan Python.

  • Tambahan untuk objek-objek ini cukup jelas
    (a1+b13)+(a2+b23)=(a1+a2)+(b1+b2)3
  • Perkalian sedikit lebih rumit, tetapi kita dapat kode keras itu juga
    (a1+b13)×(a2+b23)=(a1a23b1b2)+(a1b2+a2b1)3
  • Tipe data saya juga perlu mengakomodasi pembagian. Untuk kesederhanaan mari kita ambil kebalikan:
    1a+b3=ab3a2+3b2

Apakah ada cara alami berbasis matriks untuk mengkodekan operasi ini, mirip dengan bagaimana dapat ditulis dalam hal 2 × 2 matriks?C2×2

(abba)

Mungkin saya hanya akan melakukan hard-code operasi sebagai tiga kali lipat dengan tiga operasi yang diuraikan di atas. Ada ide?

Jawaban:


10

a+b3

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

a2+3b2

Anda telah mempertimbangkan menggunakan tiga kali lipat , yang saya anggap Anda akan menggunakan bilangan bulat dan penyebut umum. Pendekatan itu mungkin berguna dalam representasi matriks juga.

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

1/zQ[3]z

Tidak peduli bagaimana Anda mewakili elemen bidang Anda, Anda bisa membebani operator di Python menggunakan "metode ajaib". Lihat juga posting SO ini tentang cara membuat tipe numerik Anda sendiri dengan Python.

Saya tidak berpikir akan ada lebih banyak pekerjaan yang mengkode representasi elemen lapangan kuadrat baik sebagai matriks 2 x 2 bilangan rasional atau sebagai pasangan bilangan rasional, karena operasi aritmatika tidak begitu rumit. Namun, saya menduga pendekatan kedua akan lebih cepat.


1
Mungkin menarik untuk membandingkan kinerja praktis dari numpyops matriks -dilengkapi dengan tipe data yang ditentukan pengguna. Tidak yakin tentang pemenangnya.
ccorn

Ya itu benar, numpy memang memiliki banyak optimasi kode tangan Cython + di sisi C untuk membuat segalanya lebih cepat. Anda harus mengulang beberapa dari itu sendiri untuk mencapai efek yang sama. Meskipun demikian, fungsionalitas harus didahulukan dan kemudian orang dapat khawatir tentang kecepatan.
Daniel Shapero
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.