Python resolver ecuación para una variable

Estoy tratando de resolver una ecuación en python usando SymPy. Tengo una ecuación generada (algo como function = y(8.0-(y**3.0)) que utilizo con SymPy para crear una nueva ecuación como esta: eq = sympy.Eq(function, 2) que genera y(8.0-(y**3.0)) == 2 Pero sympy.solve(eq) no parece funcionar.

 >>> 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 "", line 1, in  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. 

gracias por leer.

La suya es una ecuación no lineal … Por lo tanto, puede utilizar optimize.fsolve para ella. Para más detalles busque la función en este tutorial scipy

(No sé por qué menciona scipy en su pregunta cuando usa sympy en su código. Asumiré que está usando sympy).

Sympy puede resolver esta ecuación si especifica una potencia de entero para y (es decir, y**3.0 cambió y**3.0 a y**3 ).

Lo siguiente funciona para mí usando 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) 

Suponiendo que quiere decir que estaba tratando de usar sympy, en lugar de scipy, entonces puede obtener Sympy (funciona con v0.7.2 +) para resolverlo haciendo un pequeño ajuste en la forma en que definió su ecuación; solo necesita poner una multiplicación operador (*) entre la primera ‘y’ y el ‘(‘. No parece importar si se especifica la potencia como flotador o no (pero es posible que fuera necesario en 0.6.7).

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

Para las ecuaciones no lineales, debe usar sympy.solvers.nsolve para resolverlo numéricamente, excepto en algunos casos especiales donde puede existir un solucionador más específico y apropiado (por ejemplo, tsolve ).

Por ejemplo, la siguiente secuencia de comandos debe generar 1.2667664310254.

 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,)) 

Esta es una ecuación no lineal. Lo que necesitas buscar es un algoritmo de búsqueda de raíz en SciPy.