使用 scipy.integrate.quad 时如何找出函数 f 被调用的值?

问题描述 投票:0回答:1

我有一个函数 f(x) = 1/x^2 ,我使用 scipy.integrate.quad 计算从 0 到 1 的积分。 scipy.integrate.quad 是一个自适应积分例程,我想知道函数 f 在 [0,1] 的哪些区域进行评估。那么,在估计积分时,对于哪些 x 值,函数 f 会被调用?

我正在考虑使用全局变量并附加调用它的 x 值以跟踪使用了哪些 x 值。但是,我不太熟悉如何做到这一点,非常感谢任何帮助,谢谢。

然后绘制一个直方图来查看区间 [0,1] 中的哪些区域被评估最多。

python numpy scipy global-variables numerical-integration
1个回答
3
投票

您可以使用装饰器类在评估函数之前保存每个值

x

class MemoizePoints:
    def __init__(self, fun):
        self.fun = fun
        self.points = []

    def __call__(self, x, *args):
        self.points.append(x)
        return self.fun(x, *args)

@MemoizePoints
def fun(x):
    return 1 / x**2

quad(fun, a = 1e-6, b = 1.0)

然后,

fun.points
包含评估函数
x
的所有
f
值。

这里,装饰器

@MemoizePoints
只是

的语法糖
def fun(x):
    return 1 / x**2

fun = MemoizePoints(fun)
© www.soinside.com 2019 - 2024. All rights reserved.