作业 2.1:相邻事件时间间隔

课程作业

模拟一个计数率稳定的随机计数过程,分别验证固定时间内计数的 Poisson 分布和相邻事件时间间隔的指数分布。

事件生成方法

设事件的平均计数率为 \(r_0=10\ \mathrm{s}^{-1}\),观测时间为 \(T=1000\ \mathrm{s}\)。先由均值为 \(r_0T\) 的 Poisson 分布产生总事件数 \(n\),再在 \([0,T]\) 内均匀产生 \(n\) 个随机事件时刻。

这样得到一组随机到达的事件。后面的计数与时间间隔都从这组事件时刻计算。

作业要求

  1. 统计每秒计数,画出它随时间的变化,以及每秒计数值的分布。计算均值 \(\mu\) 和标准差 \(\sigma\),比较 \(\sigma\) 与 \(\sqrt{\mu}\)。在计数分布上叠加均值为 10 的 Poisson 期望;用记录的总秒数乘以 Poisson 概率,使理论曲线与直方图具有相同的归一化。

  2. 将事件时刻从小到大排序,计算相邻事件时间间隔 \(\Delta t_i=t_i-t_{i-1}\)。画出 \(\Delta t\) 的分布,纵轴使用对数刻度,并用

    \[ f(\Delta t)=A e^{-r\Delta t} \]

    进行拟合。给出计数率 \(r\) 及其拟合误差,并与输入值 \(r_0\) 比较。

  3. 由排序后的事件时刻计算等待后续第 5 个事件的时间

    \[ T_{5,i}=t_i-t_{i-5}. \]

    画出 \(T_5\) 的分布,与相邻事件时间间隔分布比较,并检验其平均值是否接近 \(5/r_0\)。

进度对应第 2 章。

参考结果

在观测时间内均匀产生的事件时刻

左图显示连续 1 s 时间窗内的计数;右图比较计数分布与 \(\mu=10\) 的 Poisson 分布。

相邻事件与每五个事件的时间间隔分布

相邻事件时间间隔的指数拟合恢复输入计数率;\(T_5\) 分布在有限时间处出现峰值。

附录:本作业新增的 ROOT / PyROOT 用法

直方图的创建、绘制和拟合已在 ROOT Tutorial I(PyROOT · C++)中介绍。下面只列出本作业新增的用法。

用途C++ ROOTPyROOT
随机数发生器与 Poisson 总事件数 TRandom3 rng(12345);
int n = rng.Poisson(r0*T);
rng = ROOT.TRandom3(12345)
n = int(rng.Poisson(r0*T))
均匀事件时刻与排序 rng.Uniform(0, T)
std::sort(times.begin(), times.end());
rng.Uniform(0, T)
times.sort()
计数分布的宽度与 Poisson 概率 h.GetStdDev()
TMath::Poisson(k, mu)
h.GetStdDev()
ROOT.TMath.Poisson(k, mu)
指数拟合及参数 TF1 f("f", "[0]*exp(-[1]*x)", xmin, xmax);
f.SetParameters(h.GetMaximum(), r0);
f.GetParameter(1)f.GetParError(1)
f = ROOT.TF1("f", "[0]*exp(-[1]*x)", xmin, xmax)
f.SetParameters(h.GetMaximum(), r0)
f.GetParameter(1)f.GetParError(1)

在拟合函数中,参数 [0] 控制整体高度,参数 [1] 直接表示计数率 \(r\)。