zoukankan      html  css  js  c++  java
  • Java中利用Math.random()产生服从泊松分布的随机数

    众所周知。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个随机数。跟维基百科的概率密度分布曲线相似,该方法应该有效。

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

  • 相关阅读:
    数据库索引的作用和长处缺点
    ping不通的几种可能原因
    UVA
    strtok、strtok_s、strtok_r 字符串切割函数
    CheckBoxPreference组件
    EM算法原理
    Android中ExpandableListView控件基本使用
    拓扑排序的原理及事实上现
    DropdownList绑定的两种方法
    leetcode第一刷_Length of Last Word
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7284483.html
Copyright © 2011-2022 走看看