2010-12-15 11 views
5

Ich versuche, eine Gleichung in Python mit SymPy zu lösen. Ich habe eine erzeugte Gleichung (so etwas wie function = y(8.0-(y**3.0)), die ich mit SymPy verwenden, um eine neue Gleichung wie diese zu erstellen. eq = sympy.Eq(function, 2) die y(8.0-(y**3.0)) == 2 gibt aber sympy.solve(eq) scheint nicht zu funktionierenPython lösen Gleichung für eine Variable

>>> 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. 

Dank für das Lesen

Antwort

0
..

Dies ist eine nicht-lineare Gleichung.Was Sie suchen müssen, ist ein Wurzel finden Algorithmus in SciPy.

8

Ihre ist eine nicht lineare Gleichung ... So können Sie optimize.fsolve dafür verwenden.Für weitere Details suchen Sie nach der Funktion in diesem Tutorial scipy

7

(Ich weiß nicht, warum Sie scipy in Ihrer Frage erwähnen, wenn Sie in Ihrem Code sympy verwenden. Ich nehme an, Sie sympy verwenden.)

Sympy diese Gleichung lösen kann, wenn man eine ganze Energie für y angeben (dh y**3.0-y**3 geändert).

Folgendes funktioniert für mich mit Sympy 0.6.7.

from sympy import Eq, Symbol, solve 

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

print solve(eqn) 
2

Bei nichtlinearen Gleichungen, sollten Sie sympy.solvers.nsolve verwenden sie numerisch zu lösen, mit Ausnahme einiger Sonderfälle, wo ein spezifischer und geeigneter Solver existieren können (z tsolve).

Zum Beispiel sollte das folgende Skript 1.2667664310254 ausgeben.

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

Angenommen, Sie meinen Sie versuchten sympy zu verwenden, um SciPy im Gegensatz, dann kann man Sympy (funktioniert mit v0.7.2 +) erhalten, es zu lösen, indem eine kleine Anpassung an Art und Weise, dass Sie Ihre Gleichung definiert - Sie müssen nur einen Multiplikationsoperator (*) zwischen das erste "y" und das "(" setzen. Es scheint nicht wichtig zu sein, ob Sie die Potenz als Float angeben oder nicht (aber es ist möglich, dass es in 0.6 erforderlich war) .7).

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