2013-05-08 4 views
7

मुझे पता है कि पायथन में सिम्पी चर पर मान्यताओं को सेट कर सकता है, जैसे एक्स सकारात्मक, नकारात्मक, असली, जटिल इत्यादि। मैं सोच रहा था कि सिम्पी चर के सापेक्ष पर धारणा निर्धारित कर सकता है या नहीं अन्य चर के लिए। उदाहरण के लिए, यदि मेरे पास चर और एक्स है, तो क्या मैं sympy को अपने समाधान में x> y मानने के लिए सेट कर सकता हूं। या, वैकल्पिक रूप से, यदि मेरे पास दो चर हैं, ए और बी, क्या मैं मान सकता हूं कि एक + 2 बी < 1? धारणाओं के इस प्रकार संभवतः सिम्पी को हल करने में जटिल समाधानों को सरल बनाने में मदद करेंगे() और eigenvectors।अन्य चर के लिए सिम्पी सापेक्ष में वेरिएबल्स पर अनुमान लगाएं

मैंने पूरी तरह से देखा है और सिम्पी में इस प्रकार की धारणाओं को स्थापित करने से संबंधित जानकारी नहीं मिली है।

मैं पूछता हूँ क्योंकि मैं एक विशेष मैट्रिक्स

a,b = symbols('a,b', nonnegative=False) 
M = Matrix([ [1-a-2*b, a, b, b], 
      [a, 1-a-2*b, b, b], 
      [b, b, 1-a-2*b, a], 
      [b, b, a, 1-a-2*b] ]) 

Sympy की eigenvectors को खोजने के लिए प्रयास कर रहा हूँ eigenvalues ​​सही ढंग से

M.eigenvals() 

मैं MATLAB और वॉलफ्रेम अल्फा, के माध्यम से की पुष्टि की है जो पाता है जो सभी एक ही परिणाम दें। हालांकि, eigenvectors एक मेस

M.eigenvects() 

MATLAB और वॉलफ्रेम अल्फा [1,1,1,1] [-1, -1,1,1] [0,0, -1,1 के दोनों वापसी eigenvectors हैं ] [-1,1,0,0], जो सही eigenvectors हैं। मैंने सिम्पी के परिणामों को सरल बनाने की भी कोशिश नहीं की है क्योंकि वे अविश्वसनीय रूप से लंबे और जटिल हैं। मुझे संदेह है कि इसे चर पर धारणाओं के साथ करना है, जैसे कि एक + 2 बी < 1 निर्दिष्ट करना, लेकिन मुझे यकीन नहीं है।

उत्तर

9

मैं एक टिप्पणी के रूप में इस पोस्ट करने के लिए है कि क्या सोच रहा था, लेकिन यह बहुत लंबा है:

लघु जवाब: एक प्रयोग करने योग्य तरीके से नहीं।

सिम्पी की धारणा प्रणाली अभी एक गड़बड़ है (संस्करण 0.7.2, मई 2013 तक नवीनतम)। एक संभावित जीएसओसी परियोजना के कारण इस गर्मी में यह बेहतर होगा, लेकिन यह अभी तक निश्चित नहीं है।

वास्तव में सिम्पी के भीतर दो धारणा प्रणाली हैं। पुराना, जो स्वयं को प्रतीकों को धारणाओं को जोड़ता है (इसलिए अभिव्यक्ति पेड़ के पुनर्निर्माण के साथ समस्याएं पैदा होती हैं) और कन्स्ट्रक्टर (जैसे Symbol(..., positive=True)) में कहा जाता है, और यह नया है, जो वैश्विक मान्यताओं के लिए वैश्विक चर के आसपास आधारित है और संदर्भ प्रबंधकों (with assume(...):) स्थानीय लोगों के लिए।

सिम्पी के भीतर कई कार्य पुराने मान्यताओं की जांच करते हैं (उदाहरण के लिए Abs यह जांच करेगा कि क्या कीवर्ड तर्क positive सेट किया गया था), लेकिन अभी भी याद आ सकती है। नई धारणा प्रणाली अधिक शक्तिशाली हो सकती है लेकिन इस समय लगभग अप्रयुक्त है (हाल ही में सबमिड्यूल को छोड़कर)।

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

तो आपके पास दो विकल्प हैं: धारणा प्रणाली के साथ हमारी सहायता करें या मैट्रिक्स मॉड्यूल के साथ हमारी सहायता करें। दोनों कुछ और प्यार का उपयोग कर सकते हैं।

+1

नमस्ते का उपयोग कर सकते हैं, तो आप इस धारणा प्रणाली। मैं वर्तमान स्थिति के बारे में अधिक व्यावहारिक सुझावों कहाँ सीख सकते हैं बारे में बहुत कुछ पता करने के लिए लग रहे हैं 2016 के अंत में धारणा प्रणाली का? सिम्पी अब संस्करण 1 पर है और अभी भी दो धारणा प्रणालियों की प्रतीत होती है क्योंकि धारणा मॉड्यूल और प्रतीक कन्स्ट्रक्टर धारणाएं हैं। दस्तावेज़ीकरण यह नहीं बताता कि अभी भी दो सिस्टम क्यों हैं या मार्गदर्शन यह जानने के लिए कि एक या दूसरे का उपयोग कब करें। – Shaun

+0

@ ख़ुन, अद्यतन निर्देशों के लिए पूछने का सबसे अच्छा स्थान सिम्पी मेलिंग सूची होगी। – Krastanov

4

धारणाएं यहां खेलने में नहीं आ रही हैं। आमतौर पर केवल तभी महत्वपूर्ण होता है जब आपके पास वर्ग की जड़ें हों, क्योंकि sqrt(x**2) = x केवल x >= 0 है।

इसके लिए आपको केवल इतना करना है कि परिणाम को सरल बनाएं।Matrix.eigenvects में simplify ध्वज है, लेकिन यह स्पष्ट रूप से परिणामों को सरल नहीं बनाता है। मैं इसके लिए एक मुद्दा खोलूंगा। इस बीच, आप मैन्युअल रूप से ऐसा कर सकते हैं। नोट में जगह कि Matrix.simplify में कार्य करता है (यदि आप नहीं है कि तरह, आप Matrix.applyfunc(simplify)

>>> A = M.eigenvects() 
>>> A[0][2][0].simplify() 
>>> A[1][2][0].simplify() 
>>> pprint(A) 
⎡⎛1, 1, ⎡⎡1⎤⎤⎞, ⎛-4⋅b + 1, 1, ⎡⎡-1⎤⎤⎞, ⎛-2⋅a - 2⋅b + 1, 2, ⎡⎡-1⎤, ⎡0 ⎤⎤⎞⎤ 
⎢⎜  ⎢⎢ ⎥⎥⎟ ⎜    ⎢⎢ ⎥⎥⎟ ⎜     ⎢⎢ ⎥ ⎢ ⎥⎥⎟⎥ 
⎢⎜  ⎢⎢1⎥⎥⎟ ⎜    ⎢⎢-1⎥⎥⎟ ⎜     ⎢⎢1 ⎥ ⎢0 ⎥⎥⎟⎥ 
⎢⎜  ⎢⎢ ⎥⎥⎟ ⎜    ⎢⎢ ⎥⎥⎟ ⎜     ⎢⎢ ⎥ ⎢ ⎥⎥⎟⎥ 
⎢⎜  ⎢⎢1⎥⎥⎟ ⎜    ⎢⎢1 ⎥⎥⎟ ⎜     ⎢⎢0 ⎥ ⎢-1⎥⎥⎟⎥ 
⎢⎜  ⎢⎢ ⎥⎥⎟ ⎜    ⎢⎢ ⎥⎥⎟ ⎜     ⎢⎢ ⎥ ⎢ ⎥⎥⎟⎥ 
⎣⎝  ⎣⎣1⎦⎦⎠ ⎝    ⎣⎣1 ⎦⎦⎠ ⎝     ⎣⎣0 ⎦ ⎣1 ⎦⎦⎠⎦ 
+0

https://code.google.com/p/sympy/issues/detail?id= 3811 – asmeurer

+0

आह धन्यवाद! थ हल हो जाता है वास्तव में मेरे पास कई मुद्दों को हल करता है। मैंने स्क्वार्ट (जैसे के-ए) ** 2 जैसे स्क्वायर जड़ों वाले ईजिनवेक्टरों के साथ मुद्दों में भाग लिया है। यह धारणा निर्दिष्ट करने में सक्षम होना अच्छा होगा कि के> ए इसलिए यह सकारात्मक के रूप में सरल हो जाता है। उपरोक्त पद के आधार पर, ऐसा प्रतीत होता है कि यह अभी तक संभव नहीं है। – Nate

+1

आप इसे नई धारणाओं के साथ कुछ डिग्री कर सकते हैं। 'परिष्कृत करें (expr, Q.positive (के - ए))' का प्रयास करें। – asmeurer

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