Python解决一个变量的等式

时间:2010-12-15 10:54:08

标签: python solver sympy equations

我正在尝试使用SymPy在python中解决方程式。我有一个生成的等式(类似function = y(8.0-(y**3.0)),我与SymPy一起创建一个新的等式:eq = sympy.Eq(function, 2),它输出y(8.0-(y**3.0)) == 2。但是sympy.solve(eq)似乎没有工作

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

感谢阅读。

5 个答案:

答案 0 :(得分:9)

你的是非线性方程式......所以你可以使用optimize.fsolve。有关详细信息,请查看本教程中的函数scipy

答案 1 :(得分:8)

(我不知道为什么你在代码中使用sympy时会在你的问题中提到scipy。我会假设你正在使用sympy。)

如果为y指定整数幂(即y**3.0更改为y**3),Sympy可以求解此等式。

以下适用于我使用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 :(得分:3)

假设你的意思是你试图使用sympy而不是scipy,那么你可以通过对你定义方程式进行小幅调整来得到Sympy(与v0.7.2 +一起使用)来解决它 - 你只需要在第一个'y'和'('之间放置一个乘法运算符(*)。无论你是否将幂指定为浮点数似乎都没关系(但它可能在0.6.7中是必需的)。

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

答案 3 :(得分:2)

对于非线性方程,您应该使用sympy.solvers.nsolve以数字方式求解,除了可能存在更具体和适当的求解器的某些特殊情况(例如tsolve)。

例如,以下脚本应输出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,))

答案 4 :(得分:0)

这是一个非线性方程。您需要查找的是SciPy中的根查找算法。