【问题标题】:python sympy simplify and Eqpython sympy 简化和 Eq
【发布时间】:2015-03-06 14:54:20
【问题描述】:

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

我有两个复杂的表达式,A 和 E,我试图找出它们是否等价。如果我简化一个,比如 E,并使用 Eq(A,E),它不会返回 True,但两者用“==”分隔。如果期望 sympy 足够聪明,可以计算出它们是平等的。 Eq(simplify(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。

【问题讨论】:

    标签: python sympy


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-17
      • 2021-03-17
      • 1970-01-01
      • 2021-07-06
      相关资源
      最近更新 更多