2016-06-28 18 views
5

w wyrażeniu jakSymPy: Zamień dwie zmienne

import sympy 

a = sympy.Symbol('a') 
b = sympy.Symbol('b') 

x = a + 2*b 

które chciałbym zamienić a i b odzyskać b + 2*a. Próbowałem

y = x.subs([(a, b), (b, a)]) 
y = x.subs({a: b, b: a}) 

ale żadne prace; wynikiem jest 3*a w obu przypadkach jako b, z jakiegoś powodu zostanie on najpierw wymieniony.

Jakieś wskazówki?

Odpowiedz

4

Istnieje argument simultaneous, który można przekazać do zastąpienia, co zapewni, że wszystkie substytucje nastąpią jednocześnie i nie będą się wzajemnie zakłócać, tak jak teraz.

y = x.subs({a:b, b:a}, simultaneous=True) 

Wyjścia:

2*a + b 

From the docs for subs:

Jeśli słowo kluczowe simultaneous jest True, Podwyrażenia nie będą oceniane, aż wszystkie podstawienia zostały dokonane.