2010-07-21 11 views
26

मुझे 1 + sqrt (3) जैसे अभिव्यक्तियों में हेरफेर करने की आवश्यकता है और बुनियादी अंकगणित जैसे अतिरिक्त, घटाव और विभाजन करना है। मैं परिणाम किसी प्रकार के कैनोलिक रूप में होना चाहता हूं ताकि इसे मानचित्र में एक कुंजी के रूप में उपयोग किया जा सके। एक फ्लोट में 1 + वर्ग (3) को घुमाकर गोलियों की समस्याओं के कारण व्यवहार्य नहीं है।हास्केल लाइब्रेरी सिम्पी की तरह?

मैंने पायथन में इस कार्य के लिए SymPy का उपयोग किया। क्या हास्केल के लिए समकक्ष मूल पुस्तकालय है?

+2

क्या आप '√2 - 1 == 1/(√2 + 1)' चाहते हैं? – kennytm

उत्तर

7

कृपया the numbers package देखें। यदि आपको केवल "1 + √3" जैसी सटीक संख्याओं को स्टोर करना है, तो आप प्रतीकात्मक अंकगणित के बजाय Data.Number.CReal का उपयोग करना चाह सकते हैं। यह अभिव्यक्तियों को संग्रहीत करता है और आवश्यकता होने पर अंकों की मनमानी संख्या के लिए गणना की जा सकती है।

Prelude Data.Number.CReal> let cx = 1 + sqrt (3 :: CReal) 
Prelude Data.Number.CReal> showCReal 400 cx 
"2.7320508075688772935274463415058723669428052538103806280558069794519330169088000370811461867572485756756261414154067030299699450949989524788116555120943736485280932319023055820679748201010846749232650153123432669033228866506722546689218379712270471316603678615880190499865373798593894676503475065760507566183481296061009476021871903250831458295239598329977898245082887144638329173472241639845878553977" 

वहाँ भी पैकेज में एक Data.Number.Symbolic मॉड्यूल है, लेकिन वर्णन कहते हैं, "यह डिबगिंग के लिए मुख्य रूप से उपयोगी है।"

+1

सीरियल आपको समानता नहीं देगा, है ना? तो मुझे लगता है कि यह कोई नहीं है। – sclv

+0

@ एससीएलवी: यह सीआरईएल लागू करता है, सिवाय इसके कि अगर सही तरीके से किया जाता है तो यह असीम रूप से लंबा हो सकता है। सीआरईएल का '==' 40 अंकों के बाद समाप्त हो जाता है। – kennytm

+0

"ध्यान दें कि सीआरईएल पर तुलना संचालन अलग हो सकता है क्योंकि यह (आवश्यकता के अनुसार) उन्हें सही ढंग से कार्यान्वित करने और हमेशा समाप्त करने के लिए असंभव है।" यह मेरे लिए सीआरईएल का नियम है। इन मूल्यों को हैश करने के लिए मुझे वास्तविक संख्याओं में रूपांतरण से बचने की आवश्यकता है। –

8

ऐसा लगता है कि आप हास्केल में कंप्यूटर बीजगणित प्रणाली (सीएएस) की तलाश में हैं। हास्केल पैकेज/मॉड्यूल के नाम पर बीजगणित वस्तुओं के इतने सारे संदर्भों के बावजूद, मैंने कभी भी सामान्य उद्देश्य और अच्छी तरह से बनाए रखा सीए सिस्टम हास्केल में नहीं देखा है (जैसे पायमॉन में सिम्पी या ऋषि)।

हालांकि the list of Computer Algebra Systems विकिपीडिया पर में मैं

DoCon. The Algebraic Domain Constructor

के लिए एक संदर्भ मिल गया है यह एक non-standard license का उपयोग करता है, लेकिन मैं कहना है कि यह अभी भी मुक्त स्रोत (हालांकि नाम बदलने और श्रेय देने की आवश्यकताओं के साथ) की हिम्मत। जुलाई 2010 तक docon-2.11 अभी भी जीएचसी 6.12.1 के साथ बनाता है और डेमो/परीक्षण चलाता है (मुझे केवल डेमो की एक फाइल में LANGUAGE FlexibleContexts प्रगामा डालना पड़ा था)।

डिकॉन अच्छी तरह से प्रलेखित (मैनुअल के 362 पृष्ठ) है। इसके मैनुअल स्रोतों के साथ ज़िप के अंदर पैक किया जाता है, तो मैं सुविधा के लिए इसे ऑनलाइन डाल अलग:

DoCon 2.11 Manual.ps

के माध्यम से देखने के लिए कृपया अगर यह अपनी आवश्यकताओं सूट की जाँच करने के।

+0

पोस्टर के उद्देश्य के लिए डिकॉन थोड़ा हेवीवेट लगता है। – sclv

+0

मैं सहमत हूं, लेकिन मुझे हास्केल के लिए और कुछ नहीं पता है। – sastanin

+0

डिकॉन बहुत भयानक लग रहा है।मुझे वास्तव में कट्टरपंथियों को नकारने के लिए लैंडो के एल्गोरिदम का एक हास्केल कार्यान्वयन है (और राशनल और स्क्वायर जड़ों के साथ मूल अंकगणित करने के लिए कुछ और)। –

4

cyclotomic पैकेज देखें, जो चक्रवात संख्याओं पर सटीक अंकगणितीय लागू करता है। इनमें सभी बीजगणितीय संख्याएं शामिल हैं (इसलिए विशेष रूप से 1 + वर्ग (3)) और महत्वपूर्ण संचालन (समानता की तरह) निर्णायक हैं।

वे Ord उदाहरण प्रदान नहीं करते हैं (इसी कारण से जटिल संख्याएं नहीं होती हैं), लेकिन यदि कोई व्यक्ति किसी लुकअप टेबल में कुंजी के रूप में उपयोग करना है तो कोई गैर-अर्थपूर्ण उदाहरण लागू कर सकता है। आप इस लेखक को सही तरीके से कैसे करें इसके बारे में लेखक से संपर्क करना चाह सकते हैं, क्योंकि कुछ ऐसे आविष्कार हो सकते हैं जो स्पष्ट नहीं हैं (उदाहरण के लिए coeffs मानचित्र में शून्य के बारे में सावधान रहना आवश्यक हो सकता है)।

संबंधित मुद्दे