以对数方式对模拟步骤进行采样

计算科学 模拟 蒙特卡洛 随机抽样
2021-12-07 16:53:37

例如,蒙特卡洛模拟的常见情况是,如果我们想运行我们的模拟N步骤,我们定义一个增量Δ,这样N/Δ=n告诉我们在 MC 运行期间我们测量/评估感兴趣的数量的频率。例如,说N=1000,我们想测量一个可观察的平均值f,每次之后n=100步骤(所以在这里Δ=10)。平均值是通过除以得到的f按次数f已被测量。这是对时间或 MC 步骤进行线性采样,模拟看起来像示意图(用 Python 风格编写):

interval = N/delta
f = 0
countmeasurement = 0
for mcstep in range(1,N):
  interval -= 1
  .
  .
  .
  if interval == 0:
    f += computef()
    .
    .
    interval = N/delta
    countmeasurement += 1
  #save or print
  print "steps ", mcstep, "average f ", f/countmeasurement 

题:

有了这个方案,如果稍后我们绘制f作为 MC 步长的函数,在对数对数比例图上,我们不会为每个时间尺度采样相同数量的数据点,因为我们仅对总步长进行线性采样。我们如何改变我们的采样方案,从而重新定义interval,以便我们收集相同数量的数据点f对于对数图的每个部分(时间尺度)?在蒙特卡洛模拟中以对数方式对 MC 步骤进行采样是否常见?

1个回答

如果您希望 (a,b) 区间上的采样在对数对数尺度上看起来是均匀的,请线性插值对数:samples = 10.^linspace(log10(a),log10(b))这基本上就是samples=logspace(a,b)无论如何。