Python求解单变量方程
我正在尝试用Python的SymPy库来解一个方程。我生成了一个方程,类似于 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 个回答
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)
9
我不明白你在问题中提到scipy,但在代码里却用的是sympy。我假设你是在用sympy。
如果你给y
指定一个整数的幂,sympy就能解这个方程(也就是说,把y**3.0
改成y**3
)。
下面的代码在我用的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)
9
你的方程是一个非线性方程……所以你可以使用 optimize.fsolve
来解决它。想要了解更多细节,可以在这个教程中查找这个函数,链接在这里:scipy