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

hsvhsicv  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(158)

我有一个函数f(x)= 1/x^2,我用scipy. integrate. quad. scipy.integrate.quad来计算从0到1的积分。quad是一个自适应积分程序,我想知道函数f在[0,1]的哪些区域被计算。那么,当对积分进行估计时,函数f在x的哪些值被调用?
我正在考虑使用一个全局变量,并将调用的x值附加到它的后面,以跟踪使用了哪些x值。但是,我对如何做到这一点不太熟悉,非常感谢任何帮助。
然后,计划绘制直方图,以查看区间[0,1]中的哪些区域被评估得最多。

ui7jx7zq

ui7jx7zq1#

你可以使用一个装饰器类来保存每个值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)

f = lambda x: 1 / x**2
fun = MemoizePoints(f)
quad(fun, a = 1e-6, b = 1.0)

然后,fun.points包含函数f计算的所有x值。

相关问题