java分部积分任务代码实现_Java按照指数分布实现随机数

先给出指数分布的公式:

cdd1422728a58b771b22be61c2dfb0e1.png

其中λ > 0是分布的一个参数,常被称为率参数(rate parameter)。即每单位时间发生该事件的次数。指数分布的区间是[0,∞)。 如果一个随机变量X 呈指数分布,则可以写作:X ~ Exponential(λ)。

累积分布函数可以写成:

7ad6962336b3d39b8c350ea462c227a1.png

之所以需要累积分布是因为后面会用到。下面结合代码进行说明:

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]);

}

}

得到的结果整理如下图:

87e5913775489d51285a0f4f565f28f2.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值