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