2012-02-18 28 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經常顯示錯誤:超時限?例如,我在我的代碼中添加了m = U.match(b /(a + s))。 – DarioM 2012-02-18 18:13:54

+0

我不知道;直到幾分鐘前,我不確定我是否聽說過live.sympy.org。當我在那裏嘗試時,它對我有效,FWIW。 – DSM 2012-02-18 18:17:30

+0

可能是他們的問題......謝謝你的答案。 – DarioM 2012-02-18 18:18:47

相關問題