2012
03
31
03
31
Wofram Alphaに計算してもらった
階乗の計算は大きな数値になりがちでコンピューターに任せると発散してしまいがちだ。前回誕生日のパラドックスを検証したときもやはりそう。
"scipy.misc.factorial(365)"なんて計算できやしない。発散しないように式を変形してやればいいんだけど、それより先にWolfram Alphaがどうにかしてくれないかと思い浮かんだ。
Wolfram Alphaに飛んで確かめてみるとすぐに望んでいることができるとわかった。「23人で50%をこえる」。これが誕生日のパラドックスの答えだが、23人以外でもそれぞれの人数でどの程度の確率になるか知りたかった。Wolfram Alphaはクエリとして人数を投げると同じ誕生日の人がいる確率を返してくれた。
http://www.wolframalpha.com/input/?i=birthday&a=*C.birthday-_*Formula.dflt-&f2=23&f=BirthdayProblem.n_23&x=11&y=0
というわけでWolfram Alphaに計算してもらうことにした。手作業でフォーム入力と応答のコピペをするのでは作業分量が多いのと、間違えると困るのでスクリプトを書いた。もちろんレスポンスはhtmlで返ってくるので、正規表現で欲しい数値だけ抜き出した。
"scipy.misc.factorial(365)"なんて計算できやしない。発散しないように式を変形してやればいいんだけど、それより先にWolfram Alphaがどうにかしてくれないかと思い浮かんだ。
Wolfram Alphaに飛んで確かめてみるとすぐに望んでいることができるとわかった。「23人で50%をこえる」。これが誕生日のパラドックスの答えだが、23人以外でもそれぞれの人数でどの程度の確率になるか知りたかった。Wolfram Alphaはクエリとして人数を投げると同じ誕生日の人がいる確率を返してくれた。
http://www.wolframalpha.com/input/?i=birthday&a=*C.birthday-_*Formula.dflt-&f2=23&f=BirthdayProblem.n_23&x=11&y=0
というわけでWolfram Alphaに計算してもらうことにした。手作業でフォーム入力と応答のコピペをするのでは作業分量が多いのと、間違えると困るのでスクリプトを書いた。もちろんレスポンスはhtmlで返ってくるので、正規表現で欲しい数値だけ抜き出した。
import urllib2
import re
from time import sleep
possibility = {}
for x in range(1, 100):
req = "http://www.wolframalpha.com/input/?i=birthday&a=*C.birthday-_*Formula"+\
".dflt-&f2=%s&f=BirthdayProblem.n_%s" %(x,x)
response = urllib2.urlopen(req)
html = response.read()
p = re.compile("i=([0-9.]+)&lk=1&a=ClashPrefs")
b = p.findall(html)
try:
print x,b[0]
possibility.update({x:b[0]})
except:
pass
sleep(30)
file=""
for key in possibility:
file += "%s,%s,\n" %(key,possibility[key])
f = open('c:/python26/birthday.csv', 'w')
f.write(file)
f.close()
スポンサーサイト