2015-03-06 2 views
1

Это может быть не вопрос, а просто наблюдение, но симпатия должна работать таким образом.python sympy simplify и Eq

У меня есть два сложных выражения: A и E, и я пытаюсь выяснить, эквивалентны ли они. Если я упрощаю одно, скажем E, и использую Eq (A, E), он не возвращает True, а два разделены «==». Если бы ожидалось, что sympy будет достаточно умным, чтобы работать, они равны. 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

Равенство не делает никакого упрощения, и два объекта идентичны, только если они структурно (не математически) ноль. Доказательство математического равенства (в общем случае) не является простой проблемой, поэтому, если они не идентичны (как в этом случае), SymPy даже не начинает преследовать «кролика равенства» в его дыре :-). Это ожидаемое поведение. Если вы хотите, чтобы Sympy попробовал некоторое упрощение самостоятельно, попробуйте использовать метод equals:

>>> A.equals(simplify(E*D)) 
True 
Смежные вопросы