2016-11-17 51 views
1

我正試圖對插值函數進行雙重集成,其中r = r(x,y)python集成內插函數(interp1d)

from scipy import interpolate 
import scipy as sp 

r = [0, 1, 2] 
z = [0, 1, 2] 

def cartesian(x, y, f): 
    r = sp.sqrt(x**2 + y**2) 
    return f(r) 

interp = interpolate.interp1d(r, z) 

print(cart(1,1,interp)) 

a = sp.integrate.dblquad(cart, 0, 1, lambda x: 0, lambda x: 1, args=(interp)) 
print(a) 

執行笛卡爾函數一次會產生正確的答案。但是整體給人的以下錯誤:

TypeError: integrate() argument after * must be an iterable, not interp1d 

我不明白爲什麼我的功能不是iterable,不知道如何將它轉換成一個iterable形式。非常感謝您的幫助。

回答

1

args應該是一個序列參數,所以:

sp.integrate.dblquad(cart, 0, 1, lambda x: 0, lambda x: 1, args=(interp,)) 

interp後的逗號是關鍵:在Python,(x)只是x,但(x,)是一個元組(即序列) 。