我编写了一些代码,将放射性衰变建模到检测器上,以进行多次重复试验。但是我被告知,x方向上的不确定性为0.01m,y方向上的不确定性为0.03m。因此,我编写了一个附加函数,为散点图上的每个点生成一个高斯分布-x坐标的高斯分布,平均值为x值和标准偏差为0.01,y方向也是如此。
但是我的麻烦是要解决如何在散点图上表示这一点。作业问题要求对绘图上的点分布进行“抹平”,所以也许我是否可以根据2D高斯对每个点的强度进行颜色编码?我不太确定该怎么做。谁能指出我正确的方向?
这是我的代码,可以正常工作,并且我相信生成拖尾的分辨率函数是正确的。我只是不知道如何在情节上显示它。
感谢您的时间
import numpy as np
import matplotlib.pyplot as plt
from math import acos
from scipy import random
def func(x):
return acos(1-2*x)
def inversionmethod(N):
xgen=random.uniform(0,1,N)
x_req=[]
for i in range(len(xgen)):
xreq=func(xgen[i])
x_req.append(xreq)
x_req=np.array(x_req)
return x_req
def generatedata():
N=1*10**5
# nbins=100000
tau=550*10**-6
vz=2000
distance=tau*vz
theta=inversionmethod(N)
phi = 2*np.pi*np.random.random(N)
theta -= np.pi/2
# phi=inversionmethod(N)
dist=[]
for i in range(0,N):
s=np.random.exponential(scale=distance)
dist.append(s)
x=[]
y=[]
rx=[]
ry=[]
for i in range(0,N):
if 2-dist[i]>0:
xpos=(2-dist[i])*np.tan(phi[i])
ypos= (2-dist[i])*np.tan(theta[i]) / np.cos(phi[i])
x.append(xpos)
y.append(ypos)
res=resolution(xpos,ypos,0.1,0.3)
rx.append(res[0])
ry.append(res[1])
plt.hist(rx,bins=100)
plt.show()
fig, ax= plt.subplots(figsize=(5,5))
ax.set_xlim([-100,100])
ax.set_ylim([-100,100])
ax.plot(x, y, 'ko',markersize=0.2)
plt.show()
return
def resolution(xvalue,yvalue,sdx,sdy):
x_smeared=xvalue+np.random.normal(loc=xvalue,scale=0.01)
y_smeared=yvalue+np.random.normal(loc=yvalue,scale=0.03)
return x_smeared, y_smeared
print(generatedata())