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
相关产品推荐
相关产品推荐

