【发布时间】:2017-12-23 08:19:54
【问题描述】:
我想使用 scipy.integrate.quad 评估函数的积分。以下是被积函数的样子: 我们可以注意到,该被积函数的大部分贡献将来自 0.1 到 4 或 5 ish。对于 x = 10 及以上,虽然函数是振荡的(在图片上很难分辨),但它非常小并且不断变小。
这是从 0 到某个上限的积分结果的样子。积分的上限在 x 轴上。 在这里,虽然前一百个 x 的结果似乎是稳定的,但之后就不再是这样了,即使我期待的是一条直线......
我对 python 很陌生,我不知道最好的做法是什么。我现在最好的猜测是取一些小于 100 的值作为我的积分的上限,并丢弃其他值,因为它只是从 integration.quad 收敛的不好。
编辑: 为了绘制第二张图,我使用了 scipy.integrate.quad 函数。但是,如果我只使用我生成的点来绘制被积函数(第一个图)并在 scipy.integrate.simps 中使用它并改变我积分的最大 x,我会得到一致的结果。
【问题讨论】:
-
没有任何源代码或原始数据,任何人都很难看出这里出了什么问题
-
我当然可以添加一些代码。你能告诉我什么会有帮助吗?我正在集成的功能非常复杂,因此我不确定显示整个代码是否会有所帮助。
-
您的
y值是否介于 0 和 8e-11 之间?这将导致使用 float32 甚至可能使用 float 64 的精度问题。奇怪的行为可能是由于它,虽然只是一个想法 -
@gionni 是的,有……那么这可能就是原因。
-
@gionni 函数范围高达 8e-11 并不比它高达 8 差。在浮点运算中,
8e-11 + 5e-11与8e-1 + 5e-1一样简单和健壮。跨度>