2015-01-16 15 views
5

İki ifadenin eşdeğer olup olmadığını adaçayıda nasıl belirleyebilirim? Örneğin:adaçayı matematik: İki ifadenin eşdeğer olup olmadığını nasıl kontrol edebilirim?

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 

zaten/denenmiş öne sürülmüştür Ne: (Ubuntu Linux üzerinde adaçayı 6.4.1)

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 

cevap

5

Bunu yapmanın olağan çıkış yolu bir denklem yapmaktır Bunlardan ve True veya False olup olmadığını kontrol edin.

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

Ancak bunu kanıtlamak olamazsa Adaçayı False dönecektir unutmayın yanlış olma aynı şey olmadığı, True olduğunu. İki rastgele ifadenin eşdeğerliğinin kontrol edilmesi keyfi bir şekilde uzun olabilir ve bilgisayarın tahmin edemediği bir çılgınlık dizisi/'basitleştirme' dizisi gerektirebilir.

sage: e1 is e2 
False 

Bu Python ve iki şey bu durumda değiller aynı "nesne", olduğu çok güçlü bir durumdur:

Bu

farklı sorusunu cevaplıyor.

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

Varçların rasyonel sayılar olduğunu belirten daha iyi bir yol yok mu? Örneğin, neden bu işe yaramaz (yeterince basit görünüyor): bool ((x^2)^(1/2) == x) ' – Oleg

+0

Nevermind! Eğer kullanırsam (x, 'real') 'kullanırsam çalışır. Teşekkürler! – Oleg

+0

Ben python aşina ama son çare olarak "olduğunu" denedim. Dokümanları aradım ama çok fazla sonuç aldım. Herhangi bir şansla, adaçayı belgelerinde nerede bulacağımı bilmem gerektiğini biliyor musunuz? – Oleg