2010-07-18 5 views
4

comment simplifier les exposants dans les équations dans sympycomment combiner des exposants? (x ** a) ** b => x ** (a * b)?

from sympy import symbols 
a,b,c,d,e,f=symbols('abcdef') 
j=(a**b**5)**(b**10) 
print j 
(a**(b**5))**(b**10) #ans even after using expand simplify 
# desired output 
a**(b**15) 

et s'il est impossible avec sympy quel module dois-je importer en python?

modifier même si je définir le terme 'b' comme vrai, et aussi tous les autres symboles

b = symboles ('b', real = true) exposants ne se simplifiés il simplifie seulement si les exposants sont des constantes

a=symbols('a',real=True) 
b=symbols('b',real=True) 
(a**5)**10 
a**50 #simplifies only if exp are numbers 
(a**b**5)**b**10 


(a**(b**5))**b**10 #no simplification 

Répondre

7

(x m) n = xmn est vrai only if m, n are real.

>>> import math 
>>> x = math.e 
>>> m = 2j*math.pi 
>>> (x**m)**m  # (e^(2πi))^(2πi) = 1^(2πi) = 1 
(1.0000000000000016+0j) 
>>> x**(m*m)  # e^(2πi×2πi) = e^(-4π²) ≠ 1 
(7.157165835186074e-18-0j) 

AFAIK, sympy supports complex numbers, je crois que oui cette simplification ne doit pas être fait à moins que vous pouvez prouver b est réel.


Éditer: Il est également faux si x n'est pas positif.

>>> x = -2 
>>> m = 2 
>>> n = 0.5 
>>> (x**m)**n 
2.0 
>>> x**(m*n) 
-2.0 

Edit (par gnibbler): Voici l'exemple d'origine avec les restrictions de Kenny appliquées

>>> from sympy import symbols 
>>> a,b=symbols('ab', real=True, positive=True) 
>>> j=(a**b**5)**(b**10) 
>>> print j 
a**(b**15) 
+0

Bonne réponse, mais la sortie est la même pour 'a, b, c, d, e, f = symboles ("abcdef", real = True) ' –

+0

@gnib: Oops semble avoir manqué une autre restriction (x> 0). – kennytm

+1

thanx! Kenny et gnib, ça marche si on définit un symbole; a = symboles ('a', réel = vrai, positif = vrai) – user394706

2
a,b,c=symbols('abc',real=True,positive=True) 
(a**b**5)**b**10 
a**(b**15)#ans 
Questions connexes