在 python 中对插值函数 (interp1d) 进行积分
Integrating over an interpolate function (interp1d) in python
我正在尝试对插值函数进行二重积分,其中 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
形式。非常感谢您的帮助。
args
应该是一个 参数序列 ,所以:
sp.integrate.dblquad(cart, 0, 1, lambda x: 0, lambda x: 1, args=(interp,))
interp
后的逗号很关键:在 Python 中,(x)
只是 x
,但 (x,)
是一个元组(即序列) .
我正在尝试对插值函数进行二重积分,其中 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
形式。非常感谢您的帮助。
args
应该是一个 参数序列 ,所以:
sp.integrate.dblquad(cart, 0, 1, lambda x: 0, lambda x: 1, args=(interp,))
interp
后的逗号很关键:在 Python 中,(x)
只是 x
,但 (x,)
是一个元组(即序列) .