我正在尝试使用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.
感谢阅读。
答案 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中的根查找算法。