我正在尝试生成3个随机数,这些随机数具有截断的指数分布,其分布函数为:
F(x) = 1-(math.exp(-(x+100*math.log(1-((1-0.05)** (1/100))))/1.5))
,当x>-100*math.log(1-((1-0.05)**(1/100)))
时。
问题是当没有上限时,我不明白如何设置x值的概念。有任何想法如何使这3个数字在数学上正确吗?
答案 0 :(得分:0)
我不确定您的分布函数,对我来说有点混乱(请注意:(1-0.05)**(1/100)=(0.95 ** 0.01)),但是您可以使用系统最大作为上限,使用random.uniform()
生成随机变量x,则可以计算F(x)
以获得属于您的分布的随机值。可以像下面这样完成:
import sys
import math
import random
def F(x):
return 1-(math.exp(-(x + 100*math.log(1-(0.95**0.01)))/1.5))
def get_random_value_from_distribution():
x = random.uniform(-100 * math.log(1- (0.95**0.01)), sys.maxsize)
y = F(x)
return y
print("x1:", get_random_value_from_distribution())
print("x2:", get_random_value_from_distribution())
print("x3:", get_random_value_from_distribution())