Scipy Simpson积分计算正值结果为负的问题求助
问题原因与解决方案
你的问题源于使用的Scipy版本过旧,旧版本的simpson函数在处理非均匀间隔的自变量数组时存在符号计算bug,导致本该为正的积分结果出现负值。
验证说明
用最新版Scipy(1.10及以上)运行你的代码,得到的结果为0.006527,与np.trapz的正结果趋势一致,符合预期。
解决办法
- 升级Scipy:执行命令
pip install --upgrade scipy到最新版本即可修复该bug。 - 临时替代方案:如果暂时无法升级,可继续使用
np.trapz完成积分(精度略低于Simpson法则);或者在确认自变量数组单调递增(你的LOS是正确的递增序列)、积分方向无误的前提下,对simpson的结果取绝对值。
补充说明
从积分定义来看,你的自变量LOS单调递增、被积函数ne全为正值,结果必然为正,旧版本Scipy的simpson函数在这类非均匀大跨度数据场景下的计算逻辑存在缺陷。
内容的提问来源于stack exchange,提问作者curious
相关产品推荐
相关产品推荐

