2016-02-05 77 views
4

我想在python中創建一個函數,它會將一堆數學術語加在一起,其中包括一些任意變量名稱, 。因此,例如用'虛擬'變量創建數學函數以便稍後進行評估

def transform(terms, xterm): 
    function=.5 
    step=terms 
    odd=1 
    while step>0: 
     function+=(2/odd*np.pi)*np.sin(odd*np.pi*xterm) 
     odd+=2 
     step-=1 
    return function 

test=transform(10,somexvariable) 
print test 

這是一個傅里葉級數的特殊功能,我在我的機械師類的事情。

基本上我想,對於條件(比如5),創建一個變量,看起來像這樣的量:

function = .5 + (2/odd*np.pi)*np.sin(odd*np.pi*xvariable) +....... 

出來然而,許多方面,我想在這裏變量「奇」是唯一的號碼這種變化。

的密鑰和困難這一問題被插入一些虛擬變量我稱爲「xvariable」以便以後我可以創建這樣的陣列:

x2 = np.arange(0,10,.05) 
y = transform(2,x2) 

其結果將是那些x值的陣列在用'transform'創建的函數中進行評估。

我確信我正在以這種錯誤的方式進行......但我似乎無法弄清楚完成這項工作所需的步驟順序。

請幫忙。謝謝!

+0

也許['numpy.vectorize()'](http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.vectorize.html)是你在找什麼對於? – fjarri

+1

''.5''是一個字符串。 「0.5」是一個浮點數字。 –

+0

你是對的......'.5'是我嘗試不同方法的一件神器......只是忘了把報價關掉。 –

回答

2

我相信你要找的是functools.partial。它允許你創建一個預先填充了一些參數的函數。

from functools import partial 

def sum_powers(x, terms): 
    result = 0 
    for term in terms: 
     result += term ** x 
    return result 

sum_squares = partial(sum_powers, x=2) 
sum_squares(terms=[1, 2, 3]) 
# 14 

sum_cubes = partial(sum_powers, x=3) 
sum_cubes(terms=[1, 2, 3]) 
# 36 
+0

此代碼不適用於我。我得到一個錯誤: sum_powers()得到多個值的關鍵字參數'x' –

+0

更新,現在嘗試 –