फ्लोटिंग के बिना ईसेनस्टीन की संख्या का प्रतिनिधित्व करना


9

मेरे पास एक परियोजना है जहां मुझे द्विघात क्षेत्रों का उपयोग करना होगा विशेष रूप से संख्याओं की संख्याa+b3 साथ में a,bQ

उदाहरण के लिए यहाँ Eisenstein पूर्णांक में प्रमुख संख्याएँ हैं :

मैं ऋषि का उपयोग नहीं करना चाहता। मैं शामिल करने के लिए अपने स्वयं के डेटा प्रकार लिखना चाहूंगा numpy। PARI उपयोगी होगा - लेकिन यह पायथन के साथ संगत नहीं है।

  • इन वस्तुओं के लिए जोड़ बहुत स्पष्ट है
    (a1+b13)+(a2+b23)=(a1+a2)+(b1+b2)3
  • गुणन थोड़ा अधिक नाजुक होता है लेकिन हम इसे कठिन भी बना सकते हैं
    (a1+b13)×(a2+b23)=(a1a23b1b2)+(a1b2+a2b1)3
  • मेरे डेटाटाइप को भी विभाजन को समायोजित करने की आवश्यकता है। सरलता के लिए आइए पारस्परिक लेते हैं:
    1a+b3=ab3a2+3b2

वहाँ एक प्राकृतिक मैट्रिक्स आधारित तरीका है कि कैसे इन आपरेशनों को सांकेतिक शब्दों में बदलना है C के संदर्भ में लिखा जा सकता है 2×2 मैट्रिक्स?

(abba)

हो सकता है कि मैं ऊपर दिए गए तीन प्रचालनों वाले ट्रायल्स को केवल हार्ड-कोड कहूँ। कोई विचार?

जवाबों:


10

के लिये a+b3 आप प्रतिनिधित्व का उपयोग कर सकते हैं

(a3bba)
जोड़ स्पष्ट रूप से काम करता है। गुणा के लिए, आप सत्यापित कर सकते हैं
(a13b1b1a1)(a23b2b2a2)=(a1a23b1b23(a1b2+b1a2)a1b2+b1a2a1a23b1b2)
जो प्रतिनिधित्व को बरकरार रखता है, इस प्रकार हमारे पास एक रिंग होमोमोर्फिज्म है।

मैट्रिक्स के निर्धारक को लेने से (चुकता) मानदंड मिलता है a2+3b2, इस प्रकार प्रत्याशाओं में अपेक्षा के अनुरूप प्रतिलोम होते हैं।

आपने पहले ही त्रिगुणों का उपयोग करने पर विचार किया है, जिसके द्वारा मैं मानता हूं कि आप पूर्णांक और एक सामान्य भाजक का उपयोग करेंगे। यह दृष्टिकोण मैट्रिक्स के प्रतिनिधित्व में भी उपयोगी हो सकता है।

अद्यतन : मैट्रिक्स अभ्यावेदन के लिए एक सामान्य विधि साथी मैट्रिक्स का उपयोग करता है । उदाहरण के लिए, मान लीजिए कि आप प्रतिनिधित्व करना चाहते हैं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/z अंदर नही Q[3] भले ही zहै। उसके लिए, आप SymPy पैकेज पर एक नज़र डालना चाहते हैं ; यदि आप सीधे उनके तर्कसंगत डेटा प्रकार का उपयोग नहीं करते हैं, तो यह आपके स्वयं के हाथ से लुढ़का संस्करण के लिए प्रेरणा का काम कर सकता है। आप तब अपने द्विघात क्षेत्र प्रकार का निर्माण कर सकते हैं जो भी तर्कसंगत संख्या प्रकार आप चुनते हैं।

कोई फर्क नहीं पड़ता कि आप अपने क्षेत्र के तत्वों का प्रतिनिधित्व करते हैं, आप "जादू के तरीकों" का उपयोग करके पाइथन में ऑपरेटरों को अधिभारित कर सकते हैं । पायथन में अपना स्वयं का संख्यात्मक प्रकार बनाने पर यह एसओ पोस्ट भी देखें ।

मुझे नहीं लगता कि द्विघात क्षेत्र के 2 x 2 मैट्रिक्स के रूप में या तर्कसंगत संख्याओं की एक जोड़ी के रूप में द्विघात क्षेत्र के एक तत्व के प्रतिनिधित्व को कोड करने के लिए बहुत अधिक काम होगा, क्योंकि अंकगणितीय ऑपरेशन उस जटिल नहीं हैं। हालांकि, मुझे संदेह है कि दूसरा तरीका और तेज होगा।


1
numpyउपयोगकर्ता-परिभाषित डेटा प्रकारों के साथ -accelerated मैट्रिक्स ऑप्स के व्यावहारिक प्रदर्शन की तुलना करना दिलचस्प हो सकता है । इस बारे में निश्चित नहीं है कि विजेता क्या होगा।
19

हां यह सच है, चीजों को तेजी से बनाने के लिए सी की तरफ सिम्पी में बहुत सारे साइथन + हाथ से कोडेड अनुकूलन हैं। आपको उसी प्रभाव को प्राप्त करने के लिए अपने आप में से कुछ को फिर से करना होगा। बहरहाल, कार्यक्षमता पहले आना चाहिए और बाद में गति के बारे में चिंता कर सकता है।
डैनियल शेपरो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.