先给出指数分布的公式:
其中λ > 0是分布的一个参数,常被称为率参数(rate parameter)。即每单位时间发生该事件的次数。指数分布的区间是[0,∞)。 如果一个随机变量X 呈指数分布,则可以写作:X ~ Exponential(λ)。
累积分布函数可以写成:
之所以需要累积分布是因为后面会用到。下面结合代码进行说明:
public int rand (double lambda) {
Random random = new Random();
double u = random.nextDouble();
int x = 0;
double cdf = 0;
while (u >= cdf) {
x ++;
cdf = 1 - Math.exp(-1.0 * lambda * x);
}
return x;
}
首先生成一个0到1之间的一个随机的double U作为基础,然后开始寻找我们需要的整数,根据累积分布的公式,0对应的累积分布为0;整个方法的核心是理解while循环的意义:不断增加X,直到累积分布达到随机数U,这其实也是概率的原始定义。理解了这一点,将指数分布换成其它分布也是同样的道理。
作为验证,选取λ =0.1,执行如下代码:
public static void main(String[] args) {
DemoTest demoTest = new DemoTest();
double lambda = 0.1;
int arr[] = new int[100];
for (int i = 0; i
int rand = demoTest.rand(lambda);
if (rand
arr[rand] ++;
}
}
for (int i = 1; i
System.out.println(arr[i]);
}
}
得到的结果整理如下图: