我正在尝试模拟随时间变化的反应系统。为此,我必须将反应发生的概率值与可能发生的预先计算的时间步长相乘,将此结果保存在新变量中,并使用新变量从泊松分布中采样。
这是我的代码段:
lam = (evaluate_propensity*delta_t)
rxn_vector = np.random.poisson(lam) # probability of a reaction firing in the given time period
我编写了一个函数,用于根据系统特定的参数计算delta_t的值,计算出的值非常小0.00014970194372884217
,我认为这对np.random.poisson函数有影响。
evaluate_propensity
变量是一个数组,它根据系统中分子的数量和反应中分子之间的比率来详细描述反应发生的可能性。它是动态计算的,并且在每次迭代后随着分子数的变化而变化,但是第一次迭代的值是:
evaluate_propensity = np.array([1.0, 0.002, 0.0, 0.0])
文档指出,
lam
必须为>= 0
,而我的为(正好),但rxn_vector
总是返回零数组。
rxn_vector = [0 0 0 0]
我知道数组的最后两个元素将求值为零。但是没有想到前两个会那么好。有没有办法使它更敏感或以某种方式放大我的结果,或者我做错了什么?
欢呼声
我正在尝试模拟随时间变化的反应系统。为此,我必须将反应发生的概率值与可能发生的预先计算的时间步长相乘,...
lambda = 1.5e-4
绘制非零数字的可能性很小,为P(k>0) = 1 - P(k=0) = 1.5e-4
。您必须绘制四个以上的样本才能获得非零值。