You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

scipy.integrate.quad计算积分初始值异常问题求助

问题原因与解决方法

核心原因:积分上下限一致导致初始值为0

你定义的kfm(u, o)是计算从u到o的定积分,当第一个点取u=o=0.05时,根据定积分的基本数学性质,∫ₐᵃ f(x)dx = 0,所以初始值为0是完全正确的结果,并非代码错误。

你用梯形法则算出的“约67”,应该是基于从0到0.05的积分近似,但当前代码里的积分起点u设成了list_umf[0]=0.05,和你预期的积分起点不一致,才会出现结果偏差。

修正方案

如果你的目标是计算从0到每个o的累积积分,只需把积分下限改成0即可:

u = 0  # 将积分起点从0.05调整为0
list_kfm_func = [kfm(u, o) for o in list_umf]

梯形法与精确积分的差异说明

你提到的“梯形法第一步取kf值的1/2”,属于数值累积积分逻辑,和scipy.integrate.quad的精确定积分逻辑不同:

  • quad计算的是两个点区间内的精确积分值
  • 梯形法累积是逐步累加每个区间的近似值

如果要实现梯形法的累积积分,可以用numpy来实现:

import numpy as np

# 计算每个区间的梯形近似值
dx = np.diff(list_umf)
mid_kf = (np.array(list_kf_func[:-1]) + np.array(list_kf_func[1:])) / 2
trapezoidal_cum = np.cumsum(mid_kf * dx)
# 补上初始0值,和原列表长度对齐
trapezoidal_cum = np.insert(trapezoidal_cum, 0, 0)

内容的提问来源于stack exchange,提问作者tux007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 00:50:21