我需要算出在指定时间内衰变的原子数。我获得了Radon-222的半衰期,并由此计算出任何一个原子在1分钟内衰变的概率。
如果我有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 :(得分: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