python – 在给定比率上随机生成数字

我需要在指数分布后分布的正给定区间(a,b)上生成数字.使用逆向CDF方法,我创建了一个指数分布式的数字生成器.但是,当然,这个数字是一个正数,我希望它在给定的时间间隔内.我该怎么做只在间隔上生成?

使用逆cdf方法生成指数分布的数字的代码是in
 Python

u = random.uniform(0,1)
return (-1/L)*math.log(u)

其中L是给定的正参数.

提前致谢

最佳答案 结果x的概率通常为L exp(-Lx).然而,当我们被限制在[a,b]时,[a,b]中x的概率被放大1 /在a和b之间出现的CDF的分数:从a到b的积分(L exp( -Lt)dt)= – (exp(-Lb) – exp(-La)).

因此,x的pdf是

L exp(-Lx))/(exp(-La) – exp(-Lb),

在x的x给出一个cdf

积分从a到x [L exp(-Lt)/(exp(-La) – exp(-Lb))dt]

= [-exp(-Lx)exp(-La)] / [exp(-La) – exp(-Lb)] = u

现在反转:

exp(-Lx)= exp(-La) – u [exp(-La) – exp(-Lb)]

-Lx = -La log(1 – u [1 – exp(-Lb)/ exp(-La)])

x = a(-1 / L)log(1 – u [1 – exp(-Lb)/ exp(-La)])

给代码:

u = random.uniform(0,1)
return a + (-1/L)*math.log( 1 - u*(1 - math.exp(-L*b)/math.exp(-L*a)) ) 

请注意:对于大L或a,math.exp(-L * a)将舍入为0,从而导致ZeroDivisionError.

点赞