sympy 的解决方案似乎通常适用于解决不等式。例如:
from sympy import symbols, solve;
x = symbols('x');
print(solve('x^2 > 4', x)); # ((-oo < x) & (x < -2)) | ((2 < x) & (x < oo))
在某些情况下,所有 x 值或没有 x 值都是有效解,
solve()
返回 True
或 False
来表明这一点。
print(solve('x^2 > 4 + x^2', x)); # False
print(solve('x^2 >= x^2', x)); # True
但是,在其他情况下,我期望结果为 True 或 False,但结果却是
[]
:
print(solve('x - x > 0', x)); # []
print(solve('x - x >= 0', x)); # []
为什么会发生这种情况/我做错了什么?
请记住,表达式不是所见即所得:您的表达式中没有
x
:
print(solve('x - x > 0', x)); # [] <-- solve(0>0, x) => solve(False, x)
print(solve('x - x >= 0', x)); # [] <-- solve(0>=0, x) => solve(True, x)
由于
x
没有出现在这两个表达式中,因此在第一种情况下没有需要报告的 x
值可以使 False 变为 True;在第二种情况下,无法表示通用集合(因为任何 x 值都不能将 True 值更改为其他值)。因此,在这两种情况下,都没有要报告的解决方案(尽管对于第二种情况可能会报告错误或至少可以报告 x<=oo
),但一般来说:如果所请求的符号没有出现在方程中(在开始时或简化后) )然后返回 []
(并且 x
不会出现在 True 中)。