【问题标题】:Multiple Integration (with Scipy or otherwise)多重集成(使用 Scipy 或其他方式)
【发布时间】:2017-03-26 12:39:16
【问题描述】:

f 是单个向量参数x 的实值python 函数,定义为x 可以有多种长度。我想将f 与长度为m 的所有x(的子集)进行数值积分,其中m 是某个固定的正整数。 scipy.integrate.nquad 似乎是对多个变量进行数值积分的好选择,但是,它需要将输入函数 f 定义为 m 参数的函数,例如def f(x_1, x_2, ..., x_m): ... 而不是 def f(x): ...。 (我假设scipy 需要这个,因为它从argspec 或类似的东西中推断出积分变量的数量。)如何从我的函数f(x) 中获得这样的函数? (我希望能够为 m 的几个“大”值执行此操作,因此“手动”执行此操作不是可接受的答案。)

我也愿意接受scipy.integrate.nquad 的更好替代方案。

【问题讨论】:

  • 所以你正在整合x_n 的一个子集,同时改变另一个子集。在积分变量上使用quadnquad,并使用args 参数传递其他变量——一次一个案例。你必须迭代!

标签: python numpy scipy


【解决方案1】:

您可以使用starargs,scipy 将根据积分限制推断参数的数量。简单的例子:

from scipy import integrate
def f(*args):
    x, y, z = args
    return x*y*z

integrate.nquad(f,[[0,1],[0,1],[0,1]])
# (0.12499999999999999, 5.527033708952211e-15)

所以你可以简单地包装你的函数:

def g(*args):
    return f(np.asanyarray(args))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 2020-11-26
    • 2023-03-26
    • 2015-10-29
    相关资源
    最近更新 更多