1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

講義で書いたPythonのコードをまとめてみた その2

Last updated at Posted at 2020-03-11

はじめに

今回も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()関数を呼び出す。

実行結果は以下のツイートから確認できます。

##さいごに
今回は1問だけまとめました。
この問題に関してはあってる自信がありません...。
あとQiitaの記事を参考にして私のプログラム実行動画のツイートも載せました。
実行結果はスクショでも撮って載せるしかないんですかね?
またぼちぼちまとめていきます。

##参考文献
簡潔でわかりやすかったです。
Qiitaに動画を埋め込む方法

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?