In [1]:
%matplotlib inline
import matplotlib.pyplot as plt
from IPython.html.widgets import interact
from math import exp
def binom(n, k):
"""Binomialkoeffizient (vereinfacht)"""
result = 1
for n, k in zip(range(n, 0, -1), range(k, 0, -1)):
result *= n / k
return result
def draw(n=200, log_p=-2):
"""Dichten berechnen und plotten"""
p = 10 ** log_p
λ = p * n
x = list(range(n + 1))
# Dichte der Binomialverteilung
fb = [binom(n, k) * p**k * (1 - p)**(n - k) for k in x]
# Dichte der Poissonverteilung
fp = [exp(-λ)] * len(x)
for k in x[1:]:
fp[k] = λ / k * fp[k - 1]
plt.figure(figsize=(16, 6))
plt.plot(x, fb, 'ro--', label='Binomial')
plt.plot(x, fp, 'bo--', label='Poisson')
plt.xlim(0, 20 if λ < 20 else 100)
plt.legend()
plt.xlabel('k')
plt.ylabel('P(X=k)')
interact(draw, n=(40, 500, 10), log_p=(-3, -0.4, 0.2));