我有一个函数 f(x) = 1/x^2 ,我使用 scipy.integrate.quad 计算从 0 到 1 的积分。 scipy.integrate.quad 是一个自适应积分例程,我想知道函数 f 在 [0,1] 的哪些区域进行评估。那么,在估计积分时,对于哪些 x 值,函数 f 会被调用?
我正在考虑使用全局变量并附加调用它的 x 值以跟踪使用了哪些 x 值。但是,我不太熟悉如何做到这一点,非常感谢任何帮助,谢谢。
然后绘制一个直方图来查看区间 [0,1] 中的哪些区域被评估最多。
您可以使用装饰器类在评估函数之前保存每个值
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)