Python求解单变量方程

8 投票
5 回答
55248 浏览
提问于 2025-04-16 08:34

我正在尝试用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

撰写回答