2012-02-18 1 views
1

J'essaye d'écrire une fonction SymPy simple.SymPy: Comment obtenir des valeurs à partir de l'expression

a = Wild('a') 
b = Wild('b') 
p = Wild('p') 
q = Wild('q') 
... 

if (U).match(b/(a+s)): 
    return b*exp(-a*t) 

Disons que U = 3/(7+s). Je voudrais que mon résultat soit 3*exp(-7*t), mais il retourne juste b*exp(-a*t).

Existe-t-il un moyen d'obtenir ces valeurs et de les affecter à a et b?

Répondre

1

Bien sûr. Tout d'abord, mettre en place le système:

>>> from sympy import var, Wild, exp 
>>> s = var("s") 
>>> t = var("t") 
>>> a = Wild("a") 
>>> b = Wild("b") 
>>> U = 3/(7+s) 

La méthode .match retourne un dictionnaire:

>>> U.match(b/(a+s)) 
{b_: 3, a_: 7} 
>>> m = U.match(b/(a+s)) 

qui peut ensuite être passé comme argument à .subs:

>>> target = b*exp(-a*t) 
>>> target 
b_*exp(-t*a_) 
>>> target.subs(m) 
3*exp(-7*t) 
+0

Merci. Juste une question secondaire - pourquoi live.sympy.org affiche-t-il souvent Erreur: Limite de temps dépassée? Par exemple, je viens d'ajouter m = U.match (b/(a ​​+ s)) dans mon code entre les lignes if et return. – DarioM

+0

Je n'ai aucune idée; jusqu'à il y a quelques minutes, je ne suis pas sûr d'avoir jamais entendu parler de live.sympy.org. Cela a fonctionné pour moi quand je l'ai essayé là-bas, FWIW. – DSM

+0

Probablement leur problème ... Merci pour la réponse. – DarioM

Questions connexes