libRWalk.pl
author Andreas Thurnherr <ant@ldeo.columbia.edu>
Mon, 13 Apr 2020 11:06:22 -0400
changeset 40 c1803ae2540f
parent 0 a5233793bf69
permissions -rw-r--r--
.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     1
#======================================================================
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     2
#                    L I B R W A L K . P L 
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     3
#                    doc: Tue Oct  5 21:34:37 2010
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     4
#                    dlm: Tue Oct  5 21:47:28 2010
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     5
#                    (c) 2010 A.M. Thurnherr
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     6
#                    uE-Info: 26 26 NIL 0 0 72 2 2 4 NIL ofnI
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     7
#======================================================================
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     8
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     9
sub fac($)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    10
{ return ($_[0] < 2) ? $_[0] : $_[0]*fac($_[0]-1); }
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    11
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    12
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    13
# From: http://mathworld.wolfram.com/RandomWalk1-Dimensional.html
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    14
# Let N steps of equal length be taken along a line. Let p be the
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    15
# probability of taking a step to the right, q the probability of taking a
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    16
# step to the left, n1 the number of steps taken to the right, and  n2 the
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    17
# number of steps taken to the left.
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    18
# The following calculates the probability of taking exactly n1 steps out
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    19
# of N (= n1+n2) to the right.
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    20
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    21
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    22
sub pNSteps(@)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    23
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    24
	my($n1,$N,$p,$q) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    25
	$p = $q = 0.5 unless defined($p);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    26
	return fac($n1+($N-$n1)) / (fac($n1)*fac($N-$n1)) * $p**$n1 * $q**($N-$n1);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    27
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    28
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    29
1;