均匀分布变量之间的差异,Python

2024-09-30 18:21:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python非常陌生,我试图将这个问题作为一个学习练习来使用,但我无法解决它

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

X,Y~U[0200]

Z=X-Y

p(| Z |<;7)=

我想知道最有意义的分析方法,因为我认为Python可能有一些有用的库来帮助,因为如果我想做一个随机模拟,我会在C++根中做,这将花费我更少的时间。p>

我的计算方法如下,但与我的分析计算不同。有人能提出更好/更准确的方法来解决同样的问题吗

非常感谢

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)

Tags: importlt证明sizeaspltuniformax
1条回答
网友
1楼 · 发布于 2024-09-30 18:21:54

Edit:添加了一些代码以改进图形。


您的代码很好,结果与解析推导的值一致。为了更容易地理解这一点,我稍微修改了您的代码,将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

enter image description here

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

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

=0.068775

因此,理论值与您的模拟结果一致

相关问题 更多 >