在python中集成插值函数(interp1d)

时间:2016-11-17 13:45:33

标签: python function integration interpolation iterable

我试图对插值函数进行双重积分,其中r = r(x,y)

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 个答案:

答案 0 :(得分:1)

sp.integrate.dblquad(cart, 0, 1, lambda x: 0, lambda x: 1, args=(interp,)) 应该是参数的序列,所以:

interp

(x)之后的逗号至关重要:在Python中,x只是(x,),但{{1}}是一个元组(即序列)。