【发布时间】:2018-04-11 10:51:34
【问题描述】:
我有一个算法,旨在将两个函数相乘并整合结果。一个是 1.0 左右的小正态分布,标准差约为 0.1;另一个也是正常的,但要大得多,平均为 100,000,标准差为 15,000。
代码如下:
def integrand(x, z, mu, sigma) :
# goal is to return return f_x(x)*f_y(z/x)*1/abs(x)
# return normal(x, mu, sigma) * normal(z/x, 100000, 15000)/abs(x)
return normal(z/x, mu, sigma) * normal(x, 100000, 15000)/abs(x)
pResult = quad(integrand, -10000000,10000000,
args=(_z, MU, SIGMA),
points = [1.0, 2.0, 100000.0],
epsabs = 1, epsrel = .01)
这是一个乘以随机变量的公式,Z = XY。看起来我可以交换 z/x 在被积函数中的位置,但是在尝试查看哪种方式运行得更快(通过注释掉 integrand() 中的两个返回语句之一)时,我惊讶地得到不同的结果(一个是 114,221.4,另一个是 116,174.2)。知道为什么吗?
另外,当我循环遍历大范围的 z 值并绘制 P(z) 与 z 时,图表看起来不同,一个看起来正确(像正态分布 - 使用第一个 return 语句),另一个看起来像带软角的礼帽。
【问题讨论】:
标签: python scipy numerical-integration