2015-01-16 11 views
5

Jak określić w szałwie, czy dwa wyrażenia są równoważne? Na przykład:matematyka sage: jak sprawdzić, czy dwa wyrażenia są równoważne?

sage: var('x') 
x 
sage: e1 = 1 + x 
sage: e2 = x + 1 
sage: e3 = x + 2 
sage: is_equivalent(e1, e2) 
True 
sage: is_equivalent(e1, e3) 
False 
sage: var('y') 
y 
sage: e4 = x * (1 + y) 
sage: e5 = x + (x * y) 
sage: is_equivalent(e4, e5) 
True 
sage: is_equivalent(e4, e1) 
False 
sage: assume(x, 'real') 
sage: e6 = sqrt(x**2) + 1 
sage: is_equivalent(e6, e1) 
True 

Co zostało już sugerowane/próbowałem: (szałwia 6.4.1 na Ubuntu Linux)

sage: e1 == e2 
x + 1 == x + 1 
sage: e1 is e2 
False 
sage: e1.match(e2) is not None 
True 
sage: e4.match(e5) is not None 
False 

Odpowiedz

5

Zwykłym sposobem na to jest, aby równanie się z nich i sprawdź, czy jest to True lub .

sage: e4 == e5 
x*(y + 1) == x*y + x 
sage: bool(_) 
True 

jednak pamiętać, że Sage powróci False jeśli nie może tego udowodnić jest True, który nie jest tym samym, co będąc fałszywe. Sprawdzanie równoważności dwóch dowolnych wyrażeń może być dowolnie długie i może wymagać szalonej sekwencji rozszerzeń/"uproszczeń", których komputer nie jest w stanie przewidzieć.

to odpowiadając na inne pytanie:

sage: e1 is e2 
False 

To jest Python, i jest bardzo silny warunek, że dwie rzeczy są takie same „obiekt”, który w tym przypadku nie są.

sage: a = 1 
sage: b = 1 
sage: a is b 
False 
sage: a = 1 
sage: b = a 
sage: a is b 
True 
+0

Nie ma lepszego sposobu, takiego jak ten, który określa, że ​​vary są liczbami wymiernymi? Na przykład, dlaczego to nie działa (wydaje się dość proste): 'bool ((x^2)^(1/2) == x)' – Oleg

+0

Nieważne! Działa, jeśli używam 'assume (x, 'real')'. Dzięki! – Oleg

+0

Jestem zaznajomiony z pytonem, ale spróbowałem "jest" w ostateczności. Przeszukałem dokumenty, ale uzyskałem zbyt wiele wyników. Czy przypadkiem nie wiesz, gdzie w dokumentach o mędrcach powinienem szukać tego? – Oleg

Powiązane problemy