0

我正在使用 scipy quad,我显然误解了与限制选项相关的文档。我想限制评估我的函数的子间隔数,以便减少运行时间。我整理了一个简短的例子来说明我的困惑。

def func(x):
    print x
    return x

quad(func,0,10,limit=4)

我希望打印 4 个 x 值,但我得到了 21 个。任何帮助都将不胜感激。

干杯,威廉

4

3 回答 3

1

关键字控制自适应子区间的limit数量,但不直接控制评估的数量。即,QUADPACK 可能使用一个高阶求积,它在每个间隔内多次评估函数。评估的数量也不必被 4 整除,因为例程可能会进行一些额外的评估。

详情见源代码

于 2013-11-07T22:43:25.477 回答
0

你犯了一个错误, quad 的结果是:

In [30]: a = quad(func,0,10,limit=4)
5.0
0.130467357414
9.86953264259
0.674683166555
9.32531683344
1.6029521585
8.3970478415
2.83302302935
7.16697697065
4.25562830509
5.74437169491
0.021714184871
9.97828581513
0.349212543221
9.65078745678
1.09591136707
8.90408863293
2.18621432666
7.81378567334
3.52803568649
6.47196431351

In [31]: a
Out[31]: (50.0, 5.551115123125783e-13)

只需删除print函数中的语句并打印quad

于 2013-11-07T22:04:00.347 回答
0

打印件似乎来自您func的功能而不是quad. quad简单地返回。

如果要打印结果,请尝试这样:

def func(x):
    return x

print quad(func, 0, 10, limit=4)
于 2013-11-07T22:03:08.233 回答