はじめに
今回もPythonで解いていきます。
書くことないので早速ゴー。
問題とコード
ゲームでよくあるガチャについて考える。
このガチャは引くたびに1/nで当たりが出るものとする(nは与えられた自然数)。
k回引いた場合に、少なくとも1回は当たりが出る確率はいくらだろうか。
N君はこれを以下のように考えた。
「k回全てが外れである確率が
$$
(\frac{n-1}{n})^k
$$
だから、少なくとも1回は当たりがでる確率Pkは
$$
P_k = 1 - (\frac{n - 1}{n})^k
$$
である。x = 1/nとおくと、
$$
P_k = 1 - (1 - x)^k
$$
となる。xは小さいのでテイラー展開を使って以下のように概算できる。
$$
P_k = 1 - (1-x)^k
\approx 1 - (1 - kx)
= kx
\approx \frac{k}{n}
$$
ここでk = nとおくと、
$$
P_k \approx 1
$$
となる。これは「確率(1/n)のがちゃをn回引くと、1回くらいは当たりがでる」という意味なので納得できる。」
問.k = 0,1,2,3・・・に対して、Pkの正しい値を計算しグラフを描きなさい。
また、Pk > 0.999を満たす最小のkを見つけなさい。
今回はn = 100とします。
import numpy as np
import matplotlib.pyplot as plt
def graph(n = 100): #n = 100とする。
for k in range(1000): #1000回回す。
P = 1 - ((n-1)/n)**k
P = round(P, 7)
print('P' + str(k) + '=' + str(P))
if P > 0.999:
print(str(k) + '回目に0.999を超えました。\nP_k > 0.999を満たす最小のkは、k = '+ str(k))
break
#グラフの設定
plt.xlim(0, 1000)
plt.ylim(0, 2.00)
plt.plot(k, P, marker = ('.'))
if __name__ == "__main__":
graph() #graph()関数を呼び出す。
実行結果は以下のツイートから確認できます。
#Pythonお勉強日記
— マイティ・ニラ (@NILAgasukiyanen) March 11, 2020
修正後 pic.twitter.com/qlcKKVe5Jw
##さいごに
今回は1問だけまとめました。
この問題に関してはあってる自信がありません...。
あとQiitaの記事を参考にして私のプログラム実行動画のツイートも載せました。
実行結果はスクショでも撮って載せるしかないんですかね?
またぼちぼちまとめていきます。
##参考文献
簡潔でわかりやすかったです。
Qiitaに動画を埋め込む方法