2016-11-24 8 views
8

documentation on nonlinsolve इस उदाहरण देता है:चूंकि प्रलेखन में उदाहरण टूटा हुआ है, इसलिए मैं SymPy में संख्यात्मक रूप से समीकरणों की एक गैर-रैखिक प्रणाली को कैसे हल करूं?

from sympy.core.symbol import symbols 
from sympy.solvers.solveset import nonlinsolve 
x, y, z = symbols('x, y, z', real=True) 
nonlinsolve([x*y - 1, 4*x**2 + y**2 - 5], [x, y]) 
{(-1, -1), (-1/2, -2), (1/2, 2), (1, 1)} 

लेकिन फिर भी अपनी वेबसाइट पर लाइव खोल में, यह एक त्रुटि फेंकता है:

>>> from sympy.solvers.solveset import nonlinsolve 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
ImportError: cannot import name nonlinsolve 

मैं nonlinsolve का उपयोग कैसे समीकरणों संख्यानुसार की एक प्रणाली को हल करने के कर सकते हैं? मुझे पता है कि हल हो सकता है कि समीकरणों को एक सिस्टम में परिवर्तित करने के लिए ufuncify का उपयोग कर सकते हैं, लेकिन मैं उन बॉयलरप्लेट की कुछ पंक्तियों से बचने के लिए और सिम्पी का उपयोग सीधे करूँगा।

के अनुसार, solve का उपयोग करने की अनुशंसा नहीं की जाती है। समीकरणों की nonlinear प्रणालियों के लिए, दस्तावेज sympy.solvers.solveset.nonlinsolve की सिफारिश करता है, जो मैं यहां उपयोग करने की कोशिश कर रहा हूं।

+0

'sympy.solve ([x * y - 1, 4 * x ** 2 + y ** 2 - 5], [x, y])' – Stelios

+1

@Stelios सिम्पी दस्तावेज़ों के अनुसार, [' हल करें 'अनुशंसित नहीं है] (http://docs.sympy.org/dev/modules/solvers/solvers.html)। मैं इसके बारे में एक प्रश्न अपने प्रश्न में जोड़ दूंगा। –

+0

दस्तावेज़ इसके बारे में शायद थोड़ा आक्रामक हैं।सॉल्वैसेट वास्तव में हल करने के लिए जा रहा है, लेकिन अभी भी ऐसे उदाहरण हैं जहां यह आवश्यक है, जैसे nonlinear सिस्टम। – asmeurer

उत्तर

3

ऐसा लगता है कि यह मॉड्यूल 1.0.0 रिलीज में शामिल नहीं है लेकिन केवल वर्तमान head में उपलब्ध है। वैसे भी, sympy रेपो की वर्तमान स्थिति को जांचना अच्छा विचार हो सकता है क्योंकि उनकी रिलीज अपेक्षाकृत दुर्लभ है।

docs के अनुसार, इस के रूप में सरल

git clone git://github.com/sympy/sympy.git 
cd sympy 
sudo python setupegg.py develop 

के रूप में (मैं python के बजाय python3 उपयोग करने के लिए के रूप में मैं दोनों अजगर 2 और अजगर 3 सिस्टम-वाइड प्रतिष्ठानों है था। तुम भी संभवतः virtualenv उपयोग कर सकते हैं sudo से बचने के लिए।)

उसके बाद, नवीनतम GitHub संस्करण साधारण import साथ उपलब्ध हो जाएगा।

import sympy 
print(sympy.__version__) 
# 1.0.1.dev 

अब उदाहरण के काम करता है:

from sympy.core.symbol import symbols 
from sympy.solvers.solveset import nonlinsolve 
x, y, z = symbols('x, y, z', real=True) 
nonlinsolve([x*y - 1, 4*x**2 + y**2 - 5], [x, y]) 
# {(-1, -1), (-1/2, -2), (1/2, 2), (1, 1)} 

पी.एस. क्या तुम सच में अपने समीकरण का सांख्यिक समाधान में रुचि रखते हैं, ऐसा लगता है कि ufuncify + fsolve बात आप बेहतर सूट करेगा। SymPy एक कंप्यूटर बीजगणित प्रणाली है, इसलिए nonlinsolve गैर-लाइनर सिस्टम विश्लेषणात्मक रूप से को संख्यात्मक रूप से हल करने के लिए सर्वोत्तम प्रयास करेगा। और बेशक यह (किसी भी विश्लेषणात्मक समाधानकर्ताओं के साथ के रूप में) विफल कर सकते हैं:

nonlinsolve([x**5 + x**2 + 1], [x]) 
# {(CRootOf(x**5 + x**2 + 1, 0),), (CRootOf(x**5 + x**2 + 1, 1),), (CRootOf(x**5 + x**2 + 1, 2),), (CRootOf(x**5 + x**2 + 1, 3),), (CRootOf(x**5 + x**2 + 1, 4),)} 
+0

विंडोज उपयोगकर्ताओं के लिए, https://github.com/sympy/sympy पर जाएं, ज़िप डाउनलोड करें, इसे एक सुविधाजनक नए फ़ोल्डर में विस्तारित करें, उस फ़ोल्डर के अंदर सीडी जिसमें setup.py है और फिर 'python setup.py install' निष्पादित करें । एक लंबी प्रतीक्षा के लिए तैयार करें, जबकि यह प्रक्रिया एक निष्कर्ष तक पहुंच जाती है और पीसती है। फिर जांचें कि आप 'sympy' आयात कर सकते हैं और वह 'sympy .__ version__' है जो आपने अपेक्षित था। –

6

आप संख्यानुसार सिस्टम हल करने के लिए, nsolve का उपयोग करें। इसके लिए समाधान के लिए प्रारंभिक अनुमान की आवश्यकता है (विभिन्न समाधानों का उपयोग करने के लिए आप कई विकल्प भी पारित कर सकते हैं, http://docs.sympy.org/latest/modules/solvers/solvers.html#sympy.solvers.solvers.nsolve और http://mpmath.org/doc/current/calculus/optimization.html देखें)।

In [1]: nsolve([x*y - 1, 4*x**2 + y**2 - 5], [x, y], [1, 1]) 
Out[1]: 
matrix(
[['1.0'], 
['1.0']]) 

प्रतीकात्मक समाधान के लिए, मैं, वर्ष solve का उपयोग कर की सिफारिश करेंगे जब तक nonlinsolve परिपक्व।

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