这可能不是一个问题,只是一个观察,但是应该以这种方式工作。
我有两个复杂的表达,A和E,我试图找出它们是否相同。如果我简化一个,说E,并使用Eq(A,E)它不返回True,但两个用“==”分隔。如果可以预期,同情心足够聪明,他们是平等的。 Eq(简化(A),E)返回True。这是代码......
from sympy import *
B = symbols('B')
C = symbols('C')
F = symbols('F')
G = symbols('G')
H = symbols('H')
A = (B - C)*(G*(B + C) - (B - C - F)*H)**2
D = 2*(B**2+B*F-C**2)**2
E = A/D
ED=simplify(E*D)
print("E*D= {0}").format(str(ED))
print("A = {0}").format(str(A))
print("0 = {0}").format(str(simplify(A-ED)))
print("T = {0}").format(Eq(A,ED))
print("T = {0}").format(Eq(simplify(A),ED))
和输出
E*D= (B - C)*(G*(B + C) + H*(-B + C + F))**2
A = (B - C)*(G*(B + C) - H*(B - C - F))**2
0 = 0
T = (B - C)*(G*(B + C) - H*(B - C - F))**2 == (B - C)*(G*(B + C) + H*(-B + C + F))**2
T = True
请注意最后一个表达式中的-H与+ H.
答案 0 :(得分:1)
Equality不做任何简化,只有两个对象在结构上(非数学上)为零时才是相同的。证明数学平等(一般而言)并不是一个简单的问题,所以如果它们不相同(在这种情况下),SymPy甚至不会开始追逐“平等兔子”到它的洞:-)。这是预期的行为。如果你想让SymPy自己尝试一些简化,请尝试使用equals方法:
>>> A.equals(simplify(E*D))
True