gpt4 book ai didi

Python+Scipy+集成 : dealing with precision errors in functions with spikes

转载 作者:太空宇宙 更新时间:2023-11-04 01:42:48 26 4
gpt4 key购买 nike

我正在尝试使用 scipy.integrate.quad 在非常大的范围内 (0..10,000) 对函数进行积分。该函数在其大部分范围内为零,但在非常小的范围内有尖峰(例如 1,602..1,618)。

积分时,我希望输出为正,但我猜 quad 的猜测算法不知何故变得困惑并输出零。我想知道的是,有没有办法克服这个问题(例如,通过使用不同的算法、其他一些参数等)?我通常不知道尖峰会出现在哪里,所以我不能只分割积分范围并对各部分求和(除非有人知道如何做到这一点)。

谢谢!

示例输出:

>>>scipy.integrate.quad(weighted_ftag_2, 0, 10000)
(0.0, 0.0)
>>>scipy.integrate.quad(weighted_ftag_2, 0, 1602)
(0.0, 0.0)
>>>scipy.integrate.quad(weighted_ftag_2, 1602, 1618)
(3.2710994652983256, 3.6297354011338712e-014)
>>>scipy.integrate.quad(weighted_ftag_2, 1618, 10000)
(0.0, 0.0)

最佳答案

您可能想尝试其他集成方法,例如 integrate.romberg() 方法。

或者,您可以使用 weighted_ftag_2(x_samples).argmax() 获取函数较大的点的位置,然后使用一些试探法来缩短积分区间的最大值您的函数(位于 x_samples[….argmax()]。您必须根据您的问题对采样横坐标列表 (x_samples) 进行调整:它必须始终包含点位于您的功能最大的区域。

更一般地说,有关要集成的功能的任何特定信息都可以帮助您获得其积分的良好值(value)。我会结合一种对您的函数(Scipy 提供的 many methods 之一)有效的方法与积分区间的合理分割(例如,按照上面建议的方式)。

关于Python+Scipy+集成 : dealing with precision errors in functions with spikes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3186196/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com