奇怪的"symbolic boolean expression has no truth value"错误 - 它是 SymPy 中的错误吗?



考虑以下代码:

from sympy import *
from sympy.physics.units import *
x = symbols('x')
eq1 = Eq(10 * (5*kg - x), 5*kg)
eq2 = Eq(10, 5*kg / (5*kg - x))

除非我遗漏了一些显而易见的东西,否则eq1eq2在数学上是相同的。

然而,为x求解eq1效果良好,但为x求解eq1返回错误:

工作正常:

print(solve(eq1, x))

打印:

[9*kg/2]

然而,

奇怪的错误:

print(solve(eq2, x))

出现以下错误:

TypeError: symbolic boolean expression has no truth value.

有什么想法吗?我需要像eq2这样的东西来为我正在进行的项目工作。

这似乎是sympy 0.7.5及以下版本中的一个错误。如果我使用git的最新版本,它运行良好:

>>> from sympy import *
>>> from sympy.physics.units import *
>>> 
>>> x = symbols('x')
>>> eq1 = Eq(10 * (5*kg - x), 5*kg)
>>> eq2 = Eq(10, 5*kg / (5*kg - x))
>>> solve(eq2)
[9*kg/2]
>>> solve(eq1)
[9*kg/2]
>>> solve(eq1, x)
[9*kg/2]
>>> solve(eq2, x)
[9*kg/2]
>>> import sympy
>>> sympy.__version__
'0.7.5-git'

对于当前发布的版本,您可以通过使用check=False或在x:之外传递kg来解决此问题

>>> solve(eq2, x)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/sympy/solvers/solvers.py", line 901, in solve
    solution = _solve(f[0], *symbols, **flags)
  File "/usr/local/lib/python2.7/dist-packages/sympy/solvers/solvers.py", line 1418, in _solve
    for den in dens)]
  File "/usr/local/lib/python2.7/dist-packages/sympy/solvers/solvers.py", line 1418, in <genexpr>
    for den in dens)]
  File "/usr/local/lib/python2.7/dist-packages/sympy/core/relational.py", line 111, in __nonzero__
    raise TypeError("symbolic boolean expression has no truth value.")
TypeError: symbolic boolean expression has no truth value.
>>> solve(eq2, x, check=False)
[9*kg/2]
>>> solve(eq2, x, kg)
[9*kg/2]

相关内容

最新更新