2010-12-15 27 views
5

SymPy kullanarak python'daki bir denklemi çözmeye çalışıyorum. Ben bu gibi yeni bir denklem oluşturmak için SymPy ile kullanmak function = y(8.0-(y**3.0)) gibi (bir şey oluşturulan denklem vardır:. y(8.0-(y**3.0)) == 2 verir eq = sympy.Eq(function, 2) ama sympy.solve(eq) çalışmak görünmüyorPython bir değişken için denklemi çözme

>>> from sympy import Eq, Symbol as sym, solve 
>>> y = sym('y') 
>>> eqa = Eq(y(8.0-(y**3.0)), 8) 
>>> solve(eqa) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/pymodules/python2.6/sympy/solvers/solvers.py", line 332, in solve 
    result = tsolve(f, *symbols) 
    File "/usr/lib/pymodules/python2.6/sympy/solvers/solvers.py", line 716, in tsolve 
    raise NotImplementedError("Unable to solve the equation.") 
NotImplementedError: Unable to solve the equation. 

sayesinde okuma için

cevap

0
..

Bu, lineer olmayan bir denklemdir: Bulmanız gereken şey, SciPy'de bir kök bulma algoritmasıdır

8

Sizinki doğrusal olmayan bir denklemdir ... Bu yüzden optimize.fsolve'u bunun için kullanabilirsiniz. bu eğitici fonksiyonda scipy

7

(Neden kodunuzdaki semiyeyi kullandığınızda, neden sorgunuzda scipy'den bahsettiğinizi bilmiyorum. Semptom kullandığınızı varsayacağım.) y için bir tamsayı belirteci belirttiyseniz, bu denklemi bu denklemi çözebilirsiniz (örneğin, y**3 için değiştirilmiştir).

Aşağıdakiler benim için Sympy 0.6.7'yi kullanmaktadır.

from sympy import Eq, Symbol, solve 

y = Symbol('y') 
eqn = Eq(y*(8.0 - y**3), 8.0) 

print solve(eqn) 
2

doğrusal olmayan denklem için, daha spesifik ve uygun çözücü bulunabilecek bazı özel durumlarda (örneğin tsolve) dışında sayısal bunu çözmek için sympy.solvers.nsolve kullanmalıdır. Örneğin, aşağıdaki komut dosyası 1.2667664310254 çıkışını vermelidir. Eğer scipy aksine o zaman Sympy size denklemi tanımlı şekilde küçük ayarlama yaparak çözmek için (v0.7.2 + ile çalışır) alabilirsiniz, sympy kullanmaya çalıştığınız anlamına varsayarsak

from sympy import Symbol 
from sympy.solvers import nsolve 
from sympy import sin, tan 

theta = Symbol('theta') 
print nsolve(tan(theta)/(1+1*sin(theta)) - 4.0**2/9.81, theta, (1.2,)) 
3

- sadece bir çarpma operatörü (*) ilk 'y' ve '(') arasına koymanız gerekir. Bu gücü bir şamandıra olarak belirleyip belirlemediğiniz önemli değil (ancak 0,6'da gerekliydi) .7)

from sympy import Eq, var, solve 
var('y')  
eq = Eq(y*(8.0-(y**3.0)), 8) 
solve(eq)