我正在尝试在 Python 中模拟连续随机生成的数字分布,并找到组合数字(其中 y=x1+x2)在 p(0.9
n = 10000
x11 = [random.random() for i in range(n)]
x12 = [random.random() for i in range(n)]
x21 = [-0.5*(log(1-random.random())) for i in range(n)]
x22 = [-0.5*(log(1-random.random())) for i in range(n)]
x31 = [random.random() for i in range(n)]
x32 = [random.uniform(0,2) for i in range(n)]
x41 = [0.25 if random.random() < 0.8 else 1.5 for r in range(n)]
x42 = [0.25 if random.random() < 0.8 else 1.5 for r in range(n)]
x11 到 x42 是我试图获得它们将落在 0.9 和 1.8 之间的概率的情况对,其中生成的列表对被组合然后对其进行操作。因此将 x11 和 x12 组合在一起,然后找到期望值、方差和 0.9 到 1.8 p(x)。
def test():
x1,x2,c = 0.0,0.0,0.0
for i in range(10000):
if random.random()< 0.8:
x1 += 0.25
else:
x2 += 1.5
y = x1 + x2
if y>0.9 and y<=1.8:
c = c + 1
return x1,x2,c
print "test: ",test()
def sim(a,b):
#pyab1 = sum([a for a in a if a>0.9 and a<=1.8])/10000
#pyab2 = sum([b for b in b if b>0.9 and b<=1.8])/10000
#print "*****",float(pyab1+pyab2)
#print a+b
#array1 = [[a],[b]]
array1 = a+b
#array1.extend(a)
#array1.extend(b)
#c = 0
#for y in array1:
#if y>0.9 and y<=1.8:
#c = c + 1
pyab = sum([y for y in array1 if y>0.9 and y<=1.8])/10000
print("P(a < x <= b) : {0:8.4f}".format(pyab))
我只计算概率 P(0.9<%Y<=1.8) 所以计数必须在这些值范围内。1-random.random() 仅适用于这种情况,当我尝试将其用于所有情况时,他们仍然得出错误的值。这是理论上的结果,你可以看到它有什么不同:
y~u(0,1) = 0.575
y~exp(2) = 0.3371
x1~u(0,1) x2~u(0,2)
P(y=0.25)=0.8 P(y=1.5)=0.2 = 0.2
这是输出,后面是它应该给出的值,但这显示了结果有多远。
case 1: P(a < x <= b) : 0.7169 #should be 0.575
case 2: P(a < x <= b) : 0.4282 #should be 0.3371
case 3: P(a < x <= b) : 0.5966 #should be 0.4413
case 4: P(a < x <= b) : 0.5595 #should be 0.2
我对 Python 很陌生,所以如果我的问题似乎有一个我错过的明显解决方案,请耐心等待。