python - 在 python 中对插值函数 (interp1d) 进行积分

标签 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

我不明白为什么我的函数不是可迭代,也不知道如何将其转换为可迭代形式。非常感谢您的帮助。

最佳答案

args 应该是参数的序列,因此:

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

interp 后面的逗号很关键:在 Python 中,(x) 只是 x,但是 (x,) 是一个元组(即序列)。

关于python - 在 python 中对插值函数 (interp1d) 进行积分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40656563/

相关文章:

python - 在 Python 中打包 GLib.Variant

python - 如何创建一个列来测量另一个字符串列中存在的项目数?

c - 从 void 函数返回一个值

python - SQLAlchemy如何检查一个值是否在两列中的值之间?

python - Tweepy - 排除转推

python - 将函数的打印输出转换为列表

python函数随机循环if语句

matlab - 在matlab中基于正态分布生成随机数

SVN 与错误跟踪/票务软件的集成

python - Python中符号函数的数值积分