前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java中利用Math.random()产生服从泊松分布的随机数

Java中利用Math.random()产生服从泊松分布的随机数

作者头像
forrestlin
发布2018-05-24 10:23:12
2K0
发布2018-05-24 10:23:12
举报
文章被收录于专栏:蜉蝣禅修之道蜉蝣禅修之道

众所周知,Java的Math.random()产生的是服从均匀分布的随机数,但是其他分布的应用也相当广泛,例如泊松分布和高斯分布(正态分布),而这些分布Java没有很好的提供(高斯分布可以利用Random类),我们需要自己编写。

       首先是泊松分布,这是一个离散型的随机变量分布,比较好弄,此外例如考察一些到达事件的概率时,通常服从泊松分布,因此该分布相当实用。在开始编写之前,先感谢知乎一位大神的科普知识,假设有一个服从均匀分布的随机变量,u~U[0,1],F(x)为随机变量x的累计分布函数,那么F-1(u)的变量服从F分布,即F的逆函数是服从F的随机变量。代码如下:

<span style="white-space:pre">	</span>private static int getPossionVariable(double lamda) {
		int x = 0;
		double y = Math.random(), cdf = getPossionProbability(x, lamda);
		while (cdf < y) {
			x++;
			cdf += getPossionProbability(x, lamda);
		}
		return x;
	}

	private static double getPossionProbability(int k, double lamda) {
		double c = Math.exp(-lamda), sum = 1;
		for (int i = 1; i <= k; i++) {
			sum *= lamda / i;
		}
		return sum * c;
	}

计算过lamda分别为1,4,10的分布,产生1000个随机数,跟维基百科的概率密度分布曲线相似,该方法应该有效。

正态分布由于是连续变量的分布,所以求其随机变量比较困难,但可以利用中心极限定理产生,下次再说吧。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014年07月13日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档