#birthday plots from pylab import * def exact(): vals=[1] prod =1 for k in range(1,71): #No need to go higher than 70 people prod *= (365-k)/365 vals=concatenate((vals,[prod])) plot(arange(1,72),1-vals,label='exact') xlabel("Number of people.") def approximate(): #compute and plot the same thing with the exponential #approximation. vals=array([1]) prod =1 for k in range(1,71): #No need to go higher than 70 people prod *= exp(-k/365) vals=concatenate((vals,[prod])) plot(arange(1,72),1-vals,label='1-exp(-k(k-1)/(2X365))') xlabel("Number of people.") def approximate2(): #Use the lower bound 1-exp(-(k-1)**2/730) vals=array([exp(-(k-1)**2/730) for k in range(71)]) plot(arange(1,72),1-vals,label='1-exp(-(k-1)^2/(2X365))') ## vals=array([exp(-(k)**2/730) for k in range(71)]) ## plot(arange(1,72),1-vals,label='exp(-(k)^2/(2X365))') xlabel("Number of people.") def do_both(): exact() title("Probability of coincidental birhday (exact).") show() approximate() title("Proability of coincidental birthday (approximate).") show() exact() approximate() approximate2() legend(loc="upper left") title("Probability of coincidental birthday.") show()