精确计算线性函数相对于对数正态分布变量的积分

时间:2014-12-05 18:01:52

标签: python scipy numerical-integration

我迭代地计算以下函数方程的一个固定点:

enter image description here

其中h是已知函数,Q是对数正态分布。设f *函数求解函数方程。我知道f(z) / z是一个常数。当用Python以数字方式计算f 时,比率f *(z)/ z却是单调递增的。为了量化误差的大小,我计算了该比率的最后一个点和第一个点之间的差异。我认为问题的根源来自函数f

的数值积分

对于具有stdv sigma且平均为零的对数正态分布,取得函数f上的积分。在数值上,我按如下方式计算积分:

integrand = lambda z: f(z) * phi.pdf(z)
result, error = fixed_quad(integrand, int_min, int_max, n=120)

我计算的错误主要取决于整合边界int_minint_max。最初,我将集成边界指定为:

int_min, int_max = np.exp( - 1 * sigma), np.exp( 1 * sigma)

然而,当我改变积分边界以覆盖对数正态分布的概率质量的95%时,即:

int_min, int_max = np.exp( - 2 * sigma), np.exp( 2 * sigma)

比率f *(z)/ z中最高点和最低点之间的差异增加了100倍.stdv的数值是sigma = 0.012

在陈述我的问题之前,我想提出两点意见:

  1. 当我使用函数scipy.quadrature而不是scipy.fixed_quad并将集成的误差容限定义为1e-8(默认值scipy.quadrature)时,差异是比率的最高点和最低点不会改变。这是否表明整合过程毕竟不是问题的根源?
  2. 解决方案f *的级别在很大程度上取决于集成边界。级别大致上升了3倍。级别的变化可能与Stackoverlow上发布的以下问题有关:Discontinuity in results when using scipy.integrate.quad
  3. 改变集成界限还有哪些其他影响可能是f *解决方案的准确性?如果使用的集成例程确实会导致问题,那么有更好的方法来数值计算积分吗?

0 个答案:

没有答案