考虑以下代码:
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))
除非我遗漏了一些显而易见的东西,否则eq1
和eq2
在数学上是相同的。
然而,为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]