2016-02-06 63 views
-7

我需要確定在特定時間內衰減的原子數量。我獲得了氡222的一半壽命,並從中計算出任何一個原子在1分鐘內衰變的概率。Python - 如何用逐位概率生成隨機數?

如果我有x個原子,概率是y,如何計算1分鐘內衰減的數字?

我現在有一個非常低效的功能(見下文),但這可能可以更容易地完成。

def Decay(atomno, decayrate): 
    out = 0 
    for atom in range(atomno): 
     if random.uniform(0,1)<decayrate: 
      out += 1 
    return out 
+0

這個問題屬於Math.SE ... – Rishav

+5

「如果我有x個原子,概率是y,那麼我該如何計算dec在1分鐘之內?「 < - 你的原子數乘以你已經計算出的單個原子的概率? – timgeb

+0

但是我的函數不會輸出int(x * y)'。我需要它是隨機的,就像在現實生活中一樣。 – speedstyle

回答

1

聽起來好像你想要一個二項分佈的隨機數,如numpy.random.binomial所產生的。

對於一個相當大的數量的原子的,這可以通過正態分佈像這樣近似:

from random import normalvariate 

def binomialvariate(n, p): 
    """ 
    Generate random number from a binomial distribution 
     using a normal-distribution approximation 
    """ 
    return normalvariate(n * p, (n * p * (1 - p)) ** 0.5) 

其中,使用像

ATOMS = 1000000 
DECAY_PROB = 0.1 

for i in range(10): 
    print(binomialvariate(ATOMS, DECAY_PROB)) 

給出

100307.20222237767 
99709.2126851899 
99834.51936804672 
100085.99501737293 
100121.93115561221 
100379.9532069239 
99848.39057702095 
99465.46179311829 
100357.77320779095 
99990.74240156381