看其他篇章到 目录 选择。
概率分布是概率论的一个基础。
在
Commons Math
包中也专门有一个子包对概率分布进行了封装实现。在
distribution
包中,定义了一个基本接口
Distribution
。该接口只有两个方法,一个是
double
cumulativeProbability
(double x)
,一个是
double
cumulativeProbability
(double x0, double x1)
。前者对于服从某种分布的随机变量X,返回P(X<=x);后者则返回P(x0<=X<=x1)。正如其名所示,这样也就得到了概率。
具体 distribution 包中实现了基本所有的概率分布,分为连续型分布和离散型分布,连续型包括了像熟悉的指数分布、柯西分布等,离散型包括了泊松分布和二项分布等等。具体的类图结构见下图:
在连续型的 ContinuousDistribution 接口中,添加了一个 double inverseCumulativeProbability (double p) 的方法,这个方法返回 P(X<x)=p 中的 x 。也就是说通过已知概率,可以求得随机变量 X 的 x 范围。当然看 api 文档还应注意一句,在 3.0 的版本中会加入 public double density(double x) 这个求概率密度函数的方法,敬请期待吧。离散型的接口 DiscreteDistribution 中则添加了 double probability (double x) 方法,用来计算 P(X=x) 的概率。
具体的代码我们以离散型的泊松分布和连续型的正态分布来讲解。泊松分布的接口继承了 IntegerDistribution 接口,在此基础上加了 getMean() 方法和 normalApproximateProbability() 方法。正态分布 NormalDistribution 继承了 ContinuousDistribution ,又添加了 getMean() 方法和 double density(double x) 方法以及 getStandardDeviation() 方法。

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

输出:
P(X<=2.0) = 0.23810330555354414
mean value is 4.0
P(X=1.0) = 0.07326255555493674
P(X=x)=0.8 where x = 5
------------------------------------------
P(X<2.0) = 0.9772498680518208
mean value is 0.0
standard deviation is 1.0
P(X=1) = 0.24197072451914337
P(X<x)=0.8 where x = 0.8416212335731417
P(X<590) = 4.290603331968401E-4
P(X>605) = 0.047790352272814696
泊松分布只需要给定参数
λ
即可,而其期望就是
λ。所以构造方法一般就是
new
PoissonDistributionImpl(double mean)这样的形式了。
正态分布需要知道均值和方差,因此要在构造函数时传入,另外程序中以一个维基百科上的示例来验证正态分布的正确性。
相关资料:
概率分布: http://zh.wikipedia.org/zh-cn/%E6%A6%82%E7%8E%87%E5%88%86%E5%B8%83
泊松分布: http://zh.wikipedia.org/zh-cn/%E6%B3%8A%E6%9D%BE%E5%88%86%E5%B8%83
正态分布: http://zh.wikipedia.org/zh-cn/%E6%AD%A3%E6%80%81%E5%88%86%E5%B8%83
Commons math 包: http://commons.apache.org/math/index.html