24
|
1 |
#======================================================================
|
|
2 |
# L I B R A N D . P L
|
|
3 |
# doc: Thu Nov 19 14:27:19 2015
|
32
|
4 |
# dlm: Wed Sep 6 10:18:42 2017
|
24
|
5 |
# (c) 2015 A.M. Thurnherr
|
32
|
6 |
# uE-Info: 17 61 NIL 0 0 70 2 2 4 NIL ofnI
|
24
|
7 |
#======================================================================
|
|
8 |
|
25
|
9 |
# HISTORY:
|
|
10 |
# Nov 19, 2015: - created
|
32
|
11 |
# Sep 6, 2017: - finally implemented gauss_rand()
|
25
|
12 |
|
32
|
13 |
#----------------------------------------------------------------------------------------------------
|
|
14 |
# From info found at [http://www.design.caltech.edu/erik/Misc/Gaussian.html]
|
|
15 |
#
|
|
16 |
# verified with:
|
|
17 |
# plot '<Cat -Lrand -f =1,1,1e5 -F r=gauss_rand() | Hist r
|
|
18 |
#----------------------------------------------------------------------------------------------------
|
|
19 |
|
|
20 |
{ my($cached); # NB: cached values is normalized
|
|
21 |
|
|
22 |
sub gauss_rand(@)
|
24
|
23 |
{
|
32
|
24 |
my($mu,$sigma) = &antsFunUsage(-1,'ff','[mu[,sigma]]',@_)
|
|
25 |
if (@_);
|
|
26 |
$sigma = 1 unless defined($sigma);
|
|
27 |
$mu = 0 unless defined($mu);
|
|
28 |
|
|
29 |
if (defined($cached)) {
|
|
30 |
my($Y) = $cached * $sigma + $mu;
|
|
31 |
undef($cached);
|
|
32 |
return $Y;
|
|
33 |
}
|
|
34 |
|
|
35 |
my($X1,$X2,,$w);
|
|
36 |
do {
|
|
37 |
$X1 = 2*rand() - 1;
|
|
38 |
$X2 = 2*rand() - 1;
|
|
39 |
$w = $X1**2 + $X2**2;
|
|
40 |
} while ($w >= 1);
|
|
41 |
$w = sqrt((-2 * log($w)) / $w);
|
|
42 |
my($cached) = $X2 * $w;
|
|
43 |
return $X1 * $w * $sigma + $mu;
|
|
44 |
}
|
|
45 |
|
24
|
46 |
}
|
|
47 |
|
|
48 |
#----------------------------------------------------------------------------------------------------
|
|
49 |
# From info found at [http://www.mathworks.com/matlabcentral/newsreader/view_thread/301276]
|
|
50 |
#
|
|
51 |
# verified with:
|
|
52 |
# plot '<Cat -Lrand -f =1,1,1e5 -F r=pwrlaw_rand(-2) | Hist -s 100 r | Cat -S $2>2' lt 3,x**-2*1e7
|
|
53 |
# plot '<Cat -Lrand -f =1,1,1e5 -F r=pwrlaw_rand(-3) | Hist r',x**-3*7e3
|
|
54 |
# plot '<Cat -Lrand -f =1,1,1e5 -F r=pwrlaw_rand(0) | Hist -s 0.01 r'
|
|
55 |
# plot '<Cat -Lrand -f =1,1,1e5 -F r=pwrlaw_rand(1) | Hist -s 0.01 r'
|
|
56 |
# plot '<Cat -Lrand -f =1,1,1e5 -F r=pwrlaw_rand(2) | Hist -s 0.01 r'
|
|
57 |
#----------------------------------------------------------------------------------------------------
|
|
58 |
|
|
59 |
sub pwrlaw_rand($)
|
|
60 |
{
|
|
61 |
my($p) = &antsFunUsage(1,'f','exponent',@_);
|
|
62 |
return rand() ** (1/($p+1));
|
|
63 |
}
|
|
64 |
|
|
65 |
1;
|