我迭代地计算以下函数方程的一个固定点:
其中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_min
和int_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
。
在陈述我的问题之前,我想提出两点意见:
scipy.quadrature
而不是scipy.fixed_quad
并将集成的误差容限定义为1e-8(默认值scipy.quadrature
)时,差异是比率的最高点和最低点不会改变。这是否表明整合过程毕竟不是问题的根源? 改变集成界限还有哪些其他影响可能是f *解决方案的准确性?如果使用的集成例程确实会导致问题,那么有更好的方法来数值计算积分吗?