我使用 EMCEE Python 包为 MCMC 编写了以下代码
在log_prior
函数中,我定义了 EMCEE 的参数范围在它们之间而不是在它们之外移动。但问题是,在结果中我看到例如od0
具有类似的值,即使0.64
在0.68 < od0 < 0.70
我也有这个问题b
。
我想知道如何强制 EMCEE 恰好在我定义的范围之间。该模型对值非常敏感,我只想在 0.68 < od0 < 0.70
不大于或小于此值之间进行探索。
def log_prior(H0, od0, c, b, M):
if not 0.68 < od0 < 0.70 and 60 < H0 < 80 and -20 < M < -18.5 and 0.045 < b < 0.065 :
#return 0.0
return -np.inf
mu = 0.878
sigma = 0.0004
return np.log(1.0/(np.sqrt(2*np.pi)*sigma))-0.5*(c-mu)**2/sigma**2
没有Gaussian prior
代码是:
def log_prior(H0, od0, c, b, M):
if 0.68 < od0 < 0.70 and 60 < H0 < 80 and -20 < M < -18.5 and 0.045 < b < 0.065 :
return 0.0
return -np.inf