1

我对 Python 很陌生,我试图将这个问题作为一个学习练习,但我无处可去。

我想要做的是表明对于在 200ns 窗口内均匀分布的两个随机变量,它们在 7ns 内到达彼此的概率约为 5%:

X, Y ~ U[0, 200]

Z = X - Y

P(|Z| < 7) = ?

我想知道这样做的最具分析性的方法,因为我认为 Python 可能有一些有用的库可以提供帮助,而且因为如果我想做一个随机模拟,我会在 C++ ROOT 中进行,这将花费我更少的时间!

我所做的方式如下,但它与我分析计算的不同。任何人都可以提出更好/更准确的方法来解决同样的问题吗?

非常感谢!

from scipy.stats import uniform, expon
import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots(1, 1)

a, b = 0, 200
size = 1000000

# Genrating uniform distribution
uniform_distribution = uniform(loc=a, scale=b)
x = uniform_distribution.rvs(size=size)
y = uniform_distribution.rvs(size=size)

z=x-y

ax.hist(z)

zsmall=[z for i in z if abs(i)<7]

n=len(zsmall)

print("probability = ",n/size)
4

1 回答 1

0

编辑:添加了一些代码来改进这个数字。


您的代码很好,结果确实与分析得出的值一致。为了更容易看到这一点,我稍微修改了您的代码,将 X 和 Y 的域缩小到 [0, 1] 并计算 P(|Z| < 7/200),因此这仍然等同于您的原始问题.

from scipy.stats import uniform
import matplotlib.pyplot as plt

a, b = 0, 1
size = 1000000

# generate uniformly distributed x and y
uniform_distribution = uniform(loc=a, scale=b)
x = uniform_distribution.rvs(size=size)
y = uniform_distribution.rvs(size=size)

z = x - y

# set up figure
fig, ax = plt.subplots(figsize = [16, 8])
ax.set_aspect('equal')
ax.set_xlim([-1, 1])
ax.set_ylim([0, 1])
ax.set_xticks([-1, 0, 1])
ax.set_xticklabels([-1, 0, 1], size=20)
ax.set_yticks([0, 1])
ax.set_yticklabels([0, 1], size=20)

# plot histogram with y-axis scaled to show density, 
# increased bin number for better resolution
ax.hist(z, density=True, bins=200, alpha=0.5) 

# plot lines around the area we want to estimate
plt.axvline(-7/200, color='black', linestyle='--')
ax.annotate('x = -7/200', xy=(-7/200, 0.4), xytext=(-0.05, 0.4), fontsize=16, ha='right') 
plt.axvline( 7/200, color='black', linestyle='--')
ax.annotate('x = 7/200', xy=(7/200, 0.2), xytext=(0.05, 0.2), fontsize=16) 

# plot theoretical probability density function
ax.plot([-1, 0], [0, 1], color='gray', linestyle=':')
ax.plot([ 0, 1], [1, 0], color='gray', linestyle=':')

zsmall = [1 for i in z if abs(i) < 7/200]
n = len(zsmall)

print("probability =", n/size)

概率 = 0.06857

在此处输入图像描述

如您所见,这已经非常接近理论上预期的三角形分布(灰色虚线)。为了比较,我们可以计算理论概率,即虚线之间和虚线以下的区域。我们可以将其计算为虚线之间的整个矩形的面积减去由虚线上方的两个小三角形组成的正方形的面积:

2*(7/200) - (7/200)**2

= 0.068775

所以理论值确实与你的模拟结果一致。

于 2020-04-03T19:14:41.830 回答