Sympy-比较等号与等号(=)

时间:2018-06-21 02:04:29

标签: python sympy

我了解在Sympy中,==等价不适用于符号表达式,因此无法用于检查符号等价。从文档中,建议使用simplify (a-b)并检查结果是否为0。例如,

>>> simplify((x + 1)**2 - (x**2 + 2*x + 1))

但是,这似乎不适用于其中包含等号的表达式。例如,我要比较(2x = 6和x = 3),应该相等。

>>> a = Eq(2*x,6)
>>> b = Eq(x,3)
>>> simplify(a-b)
−x=3+(2x=6)

或更复杂的等式应等于

>>> a = Eq(x*(y+1),6)
>>> b = Eq(2*x*y + 2*x, 12)
>>> simplify(a-b)
(x(y+1)=6)−(2x(y+1)=12)

想知道在Sympy中是否有很好的方法或窍门。

谢谢!

1 个答案:

答案 0 :(得分:1)

使这些方程式相等的原因是它们具有相同的解集,或者对于x求解时它们都相同。让sympy解决它们并比较解决方案:

from sympy import *
x, y = symbols('x y')

a = Eq(2*x,6)
b = Eq(x,3)
print(solve(a) == solve(b)) #True

对于您更复杂的示例,该方法也适用:

a = Eq(x*(y+1),6)
b = Eq(2*x*y + 2*x, 12)
print(solve(a)) # [{x: 6/(y + 1)}]
print(solve(b)) # [{x: 6/(y + 1)}]
print(solve(a) == solve(b)) # True