-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathProbabilityDistributions.pck.st
153 lines (124 loc) · 5.54 KB
/
ProbabilityDistributions.pck.st
1
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
'From Cuis 4.2 of 25 July 2013 [latest update: #2847] on 19 July 2016 at 11:22:03 am'!
'Description '!
!provides: 'ProbabilityDistributions' 1 2!
!classDefinition: #ProbabilityDistribution category: #ProbabilityDistributions!
Object subclass: #ProbabilityDistribution
instanceVariableNames: 'uniformRandomGenerator'
classVariableNames: ''
poolDictionaries: ''
category: 'ProbabilityDistributions'!
!classDefinition: 'ProbabilityDistribution class' category: #ProbabilityDistributions!
ProbabilityDistribution class
instanceVariableNames: ''!
!classDefinition: #ExponentialProbabilityDistribution category: #ProbabilityDistributions!
ProbabilityDistribution subclass: #ExponentialProbabilityDistribution
instanceVariableNames: 'lambda'
classVariableNames: ''
poolDictionaries: ''
category: 'ProbabilityDistributions'!
!classDefinition: 'ExponentialProbabilityDistribution class' category: #ProbabilityDistributions!
ExponentialProbabilityDistribution class
instanceVariableNames: ''!
!classDefinition: #NormalProbabilityDistribution category: #ProbabilityDistributions!
ProbabilityDistribution subclass: #NormalProbabilityDistribution
instanceVariableNames: 'mean standardDeviation cachedValue'
classVariableNames: ''
poolDictionaries: ''
category: 'ProbabilityDistributions'!
!classDefinition: 'NormalProbabilityDistribution class' category: #ProbabilityDistributions!
NormalProbabilityDistribution class
instanceVariableNames: ''!
!classDefinition: #RayleighProbabilityDistribution category: #ProbabilityDistributions!
ProbabilityDistribution subclass: #RayleighProbabilityDistribution
instanceVariableNames: 'sigma'
classVariableNames: ''
poolDictionaries: ''
category: 'ProbabilityDistributions'!
!classDefinition: 'RayleighProbabilityDistribution class' category: #ProbabilityDistributions!
RayleighProbabilityDistribution class
instanceVariableNames: ''!
!ProbabilityDistribution commentStamp: '<historical>' prior: 0!
ProbabilityDistributions can also generate random numbers!
!ExponentialProbabilityDistribution commentStamp: 'jmv 4/6/2015 12:18' prior: 0!
| r h |
r _ ExponentialProbabilityDistribution lambda: 3.
h _ Histogram binCount: 500 minValue: 0 maxValue: 120.
100000 timesRepeat: [ h addValue: r nextRandomNumber ].
h plot.!
!NormalProbabilityDistribution commentStamp: 'jmv 4/6/2015 12:19' prior: 0!
| r h |
r _ NormalProbabilityDistribution new.
h _ Histogram binCount: 500 minValue: -5 maxValue: 5.
100000 timesRepeat: [ h addValue: r nextRandomNumber ].
h plot.
| r h |
r _ NormalProbabilityDistribution mean: 2.5 standardDeviation: 0.5.
h _ Histogram binCount: 500 minValue: -5 maxValue: 5.
100000 timesRepeat: [ h addValue: r nextRandomNumber ].
h plot.!
!RayleighProbabilityDistribution commentStamp: 'jmv 4/6/2015 12:22' prior: 0!
| r h |
r _ RayleighProbabilityDistribution sigma: 3.
h _ Histogram binCount: 500 minValue: 0 maxValue: 20.
1000000 timesRepeat: [ h addValue: r nextRandomNumber ].
h plot.!
!ProbabilityDistribution methodsFor: 'accessing' stamp: 'jmv 4/6/2015 12:03'!
uniformRandomGenerator
^uniformRandomGenerator ifNil: [ uniformRandomGenerator _ Random new ]! !
!ExponentialProbabilityDistribution methodsFor: 'initialization' stamp: 'jmv 4/6/2015 12:16'!
lambda: aNumber
lambda _ aNumber! !
!ExponentialProbabilityDistribution methodsFor: 'random number generation' stamp: 'jmv 4/6/2015 12:16'!
nextRandomNumber
"Answer the next value"
^(1 / (1 - self uniformRandomGenerator next)) ln * 2 * lambda squared! !
!ExponentialProbabilityDistribution class methodsFor: 'instance creation' stamp: 'jmv 4/6/2015 12:14'!
lambda: lambda
^self basicNew lambda: lambda! !
!ExponentialProbabilityDistribution class methodsFor: 'instance creation' stamp: 'jmv 4/6/2015 12:15'!
new
^self lambda: 1.0! !
!NormalProbabilityDistribution methodsFor: 'initialization' stamp: 'jmv 4/6/2015 12:08'!
mean: mu standardDeviation: sigma
mean _ mu.
standardDeviation _ sigma! !
!NormalProbabilityDistribution methodsFor: 'random number generation' stamp: 'jmv 4/6/2015 12:06'!
nextRandomNumber
"Two random values are generated. So, answer one and cache the other."
^self nextStandardNormalRandomNumber * standardDeviation + mean! !
!NormalProbabilityDistribution methodsFor: 'random number generation' stamp: 'jmv 4/6/2015 12:06'!
nextStandardNormalRandomNumber
"Two random values are generated. So, answer one and cache the other."
| x1 x2 t1 t2 y1 y2 |
cachedValue notNil
ifTrue: [
y1 _ cachedValue.
cachedValue _ nil.
^ y1 ].
x1 _ self uniformRandomGenerator next.
x2 _ self uniformRandomGenerator next.
t1 _ (-2 * x1 ln) sqrt.
t2 _ 2 * Float pi * x2.
y1 _ t1 * t2 cos.
y2 _ t1 * t2 sin.
cachedValue _ y2.
^ y1! !
!NormalProbabilityDistribution class methodsFor: 'instance creation' stamp: 'jmv 4/6/2015 12:08'!
mean: mu standardDeviation: sigma
^self basicNew mean: mu standardDeviation: sigma! !
!NormalProbabilityDistribution class methodsFor: 'instance creation' stamp: 'jmv 4/6/2015 12:09'!
new
^self mean: 0.0 standardDeviation: 1.0! !
!RayleighProbabilityDistribution methodsFor: 'random number generation' stamp: 'jmv 4/6/2015 12:21'!
nextRandomNumber
"Answer the next value"
^((1 / (1 - self uniformRandomGenerator next)) ln * 2 * sigma squared) sqrt! !
!RayleighProbabilityDistribution methodsFor: 'initialization' stamp: 'jmv 4/6/2015 12:21'!
sigma: aNumber
sigma _ aNumber! !
!RayleighProbabilityDistribution class methodsFor: 'instance creation' stamp: 'jmv 4/6/2015 12:20'!
new
^self sigma: 1.0! !
!RayleighProbabilityDistribution class methodsFor: 'instance creation' stamp: 'jmv 4/6/2015 12:20'!
sigma: sigma
^self basicNew sigma: sigma! !