7

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

谢谢阅读。

4

5 回答 5

9

Yours is a non linear equation ... So you can use optimize.fsolve for it. For further details look for the function in this tutorial scipy

于 2010-12-15T11:07:00.197 回答
9

(当您在代码中使用 sympy 时,我不知道您为什么在问题中提到 scipy。我假设您使用的是 sympy。)

y如果您为(即y**3.0更改为)指定整数幂,Sympy 可以求解此方程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)
于 2011-02-26T19:03:52.560 回答
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)
于 2013-06-28T13:32:15.860 回答
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,))
于 2011-10-06T14:40:23.223 回答
0

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

于 2010-12-15T10:59:29.227 回答