diff options
author | Guido van Rossum <guido@python.org> | 1998-04-06 14:12:13 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1998-04-06 14:12:13 (GMT) |
commit | 5810297052003f28788f6790ac799fe8e5373494 (patch) | |
tree | bbfc51a298ec8d9e5f17982e1515c8e292e763ee /Lib | |
parent | 56c04b837654c2dc51788a6d6a90a9f58e3dd57a (diff) | |
download | cpython-5810297052003f28788f6790ac799fe8e5373494.zip cpython-5810297052003f28788f6790ac799fe8e5373494.tar.gz cpython-5810297052003f28788f6790ac799fe8e5373494.tar.bz2 |
Correction to vonmisesvariate() by Magnus Kessler: it should take and
return something between 0 and 2*pi. Also added a reference to the
literature.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/random.py | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/Lib/random.py b/Lib/random.py index 49921cb..221bef6 100644 --- a/Lib/random.py +++ b/Lib/random.py @@ -79,10 +79,17 @@ TWOPI = 2.0*pi verify('TWOPI', 6.28318530718) def vonmisesvariate(mu, kappa): - # mu: mean angle (in radians between 0 and 180 degrees) + # mu: mean angle (in radians between 0 and 2*pi) # kappa: concentration parameter kappa (>= 0) - # if kappa = 0 generate uniform random angle + + # Based upon an algorithm published in: Fisher, N.I., + # "Statistical Analysis of Circular Data", Cambridge + # University Press, 1993. + + # Thanks to Magnus Kessler for a correction to the + # implementation of step 4. + if kappa <= 1e-6: return TWOPI * random() @@ -104,11 +111,11 @@ def vonmisesvariate(mu, kappa): u3 = random() if u3 > 0.5: - theta = mu + 0.5*acos(f) + theta = (mu % TWOPI) + acos(f) else: - theta = mu - 0.5*acos(f) + theta = (mu % TWOPI) - acos(f) - return theta % pi + return theta # -------------------- gamma distribution -------------------- |