主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Wofram Alphaに計算してもらった

                
tags:
階乗の計算は大きな数値になりがちでコンピューターに任せると発散してしまいがちだ。前回誕生日のパラドックスを検証したときもやはりそう。
"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()
スポンサーサイト
プロフィール

Matoba

Author:Matoba

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。