2015-02-06 14 views
5

मेरे पास चौथे क्रम का बहुपद समीकरण है और मुझे सभी जड़ों को खोजने की आवश्यकता है। सरल उदाहरण:SymPy 4 वें आदेश के बहुपद समीकरण को हल नहीं कर सकता

from sympy import (Symbol,solve,I) 

a=4+5*I; b=3+7*I; c=12-56*I; d=33+56*I; e=345-67*I; x=Symbol('x') 
eq=a*x**4 + b*x**3 + c*x**2 + d*x +e 
solve(eq,x) 

तो ए, बी, सी, डी, ई शुद्ध असली हैं, तो तब भी वह अच्छे काम करते हैं। लेकिन मेरे मामले में वे सभी जटिल संख्याएं हैं। तो फिर मैं फोन मिला:

PolynomialError: 'cannot return general quartic solution' 

मैं तरह समान मुद्दे के मिल जाए, और ठीक लागू: Description of the issueFix of the issue

लेकिन यह वास्तव में मदद नहीं करता है। वहाँ अजीब समस्या किसी तरह का, अब के रूप में कॉल (के रूप में दुविधा में परिवर्तित) है:

PolynomialError: Cannot determine if `-((12 - 56*I)/(4 + 5*I) - 3*(3 + 7*I)**2/(8*(4 + 5*I)**2))**2/12 + (3 + 7*I)*((33 + 56*I)/(4*(4 + 5*I)) + (3 + 7*I)*(3*(3 + 7*I)**2/(256*(4 + 5*I)**2) - (12 - 56*I)/(16*(4 + 5*I)))/(4 + 5*I))/(4 + 5*I) - (345 - 67*I)/(4 + 5*I)` is nonzero. 

लेकिन निर्धारित करने के लिए अभिव्यक्ति ऊपर अशून्य है सबसे सरल बात है, इसलिए जहां समस्या नहीं जानते हो सकता है।

उत्तर

1

साइम्पी के नवीनतम संस्करण में अपग्रेड करें जो मनमाने ढंग से क्वार्टिक समाधान का समर्थन करता है।

+0

मैं sympy को 0.7.6 है अलग त्रुटि मालिश (अजगर 3.4 का प्रयोग करके) अपडेट करने के बाद : __nonzero__ में लाइन 103: TypeError बढ़ाएं ("\ n% s"% self का सत्य मान निर्धारित नहीं कर सकता) – K4stan

+0

ऐसा लगता है कि यह एक बग है, जिसे SymPy के गिट संस्करण में ठीक किया गया है। – asmeurer

+0

मैं पायथन के एनाकोंडा वितरण का उपयोग कर रहा हूं। क्या इस गिट संस्करण में किसी भी तरह से अपडेट करना संभव है, या मुझे कुछ स्क्रिप्ट को फिर से लिखना है? – K4stan

0

आप एक और अधिक लचीला समाधान चाहते हैं, तो आप की तरह कुछ के साथ द्विआधारी खोज का उपयोग कर एक्स के लिए हल कर सकते थे निम्नलिखित:

def maybeRightX(maybeX, polys): 
    sum = 0 
    for i in range(len(polys)): 
     sum += polys[i]*(maybeX ** i) 
    return sum 

def solve(y, polys): 
    lo = 0 
    hi = y 
    while lo <= hi: 
     mid = (lo + hi)//2 
     if (maybeRightX(mid, polys)) < y: 
      lo = mid + 1 
     else: 
      hi = mid - 1 
    return (hi + 1) 
संबंधित मुद्दे