2012-02-18 8 views
1

シンプルなSymPy関数を記述しようとしています。SymPy:式から値を取得する方法

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

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

そう言えば、U = 3/(7+s)です。私の結果は3*exp(-7*t)になりますが、それはちょうどb*exp(-a*t)を返します。

これらの値を取得してaとbに割り当てる方法はありますか?

答えて

1

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

.match方法が辞書を返します:

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

その後、.subsに引数として渡すことができます。

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

おかげまず、システムを設定。ちょっとした疑問 - なぜlive.sympy.orgにError:Time limit exceeded?と表示されるのですか?たとえば、私はm = U.match(b /(a + s))を、それらのifとreturnの間で自分のコードに追加しました。 – DarioM

+0

私には分かりません。数分前まで私はlive.sympy.orgについて聞いたことがあるかどうか分からない。私がそこでそれを試したとき、それは私のために働いた、FWIW。 – DSM

+0

おそらく彼らの問題は...答えをありがとう。 – DarioM

関連する問題