【问题标题】:Integrating over an interpolate function (interp1d) in python在 python 中集成插值函数(interp1d)
【发布时间】:2017-04-01 02:14:39
【问题描述】:

我正在尝试对插值函数进行双重积分,其中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 形式。非常感谢您的帮助。

【问题讨论】:

    标签: python function integration interpolation iterable


    【解决方案1】:

    args 应该是参数的序列,所以:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-23
      • 2019-05-18
      • 2018-05-15
      • 2012-08-27
      • 1970-01-01
      • 2020-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多