首页 > 解决方案 > 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 中是否有很好的方法或技巧来做到这一点。

谢谢!

标签: pythonsympy

解决方案


使这些方程等效的原因是它们具有相同的解集,或者在求解 时它们是相同的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

推荐阅读