python sympy简化和Eq

时间:2015-03-06 14:54:20

标签: python sympy

这可能不是一个问题,只是一个观察,但是应该以这种方式工作。

我有两个复杂的表达,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.

1 个答案:

答案 0 :(得分:1)

Equality不做任何简化,只有两个对象在结构上(非数学上)为零时才是相同的。证明数学平等(一般而言)并不是一个简单的问题,所以如果它们不相同(在这种情况下),SymPy甚至不会开始追逐“平等兔子”到它的洞:-)。这是预期的行为。如果你想让SymPy自己尝试一些简化,请尝试使用equals方法:

>>> A.equals(simplify(E*D))
True