3

6面のサイコロがあり、面の番号は1から6です。n番目のロールで最初に1が出る確率は、nが増えるにつれて減少します。この確率が特定の制限よりも小さくなるような最小のロール数を見つけたいと思います。

def probTest(limit):
    prob = 1.0
    n = 1
    while prob > limit:
        prob = (1/6)**n
        n += 1        
    return n-1

私のコードの何が問題になっていますか?

4

6 に答える 6

7

n番目のロールで1をロールする可能性は、1/6 ^nではなく5/6^(n-1)*1/6です。
1/6 ^ nは、 n回のロールすべてで1回ロールする確率です。

最初のn-1ロールは、それぞれ5/6の確率で1つではありません。
n番目のロールは1/6の確率で1つになります。

于 2012-12-09T06:52:23.620 に答える
2

正しいものは次のようになります:prob =(5.0 / 6)**(n-1)* 1 / 6.0

于 2012-12-09T14:08:39.763 に答える
1

ありがとう。その他の要因を考慮してください。

probTest(25 / 216.0)は、正しい結果ではなく4を返しますn = 3

于 2012-12-09T17:02:49.703 に答える
0

X1回の成功に必要なベルヌーイ試行回数の確率分布は、幾何分布( https://en.wikipedia.org/wiki/Geometric_distribution )に従い、次の式で直接X=n与えられる対応する確率を計算できます。p

p = 1./6 # prob of successes
geom_prob = []
for n in range(1,25):
    geom_prob.append((1-p)**(n-1)*p) 
print geom_prob 
# [0.16666666666666666, 0.1388888888888889, 0.11574074074074076, 0.09645061728395063, 0.08037551440329219, 0.06697959533607684, 0.05581632944673069, 0.04651360787227558, 0.038761339893562986, 0.032301116577969156, 0.02691759714830763, 0.022431330956923026, 0.018692775797435855, 0.015577313164529882, 0.012981094303774901, 0.010817578586479085, 0.009014648822065905, 0.0075122073517215875, 0.006260172793101323, 0.005216810660917769, 0.0043473422174314744, 0.003622785181192896, 0.0030189876509940797, 0.002515823042495067]
import matplotlib.pyplot as plt
plt.plot(geom_prob)
plt.xlabel('n')
plt.ylabel('probability')
plt.title('Probability of getting first head on nth roll of a die')
plt.show()

ここに画像の説明を入力してください

次のように、シミュレーションを使用して確率を見つけることもできます。

import numpy as np
sim_geom = np.random.geometric(p=p, size=1000)
import seaborn as sns   
sns.distplot(sim_geom)
plt.show()

ここに画像の説明を入力してください

于 2017-02-13T05:33:46.750 に答える
-1
def probTest(limit):
    n=1
    prob = 1.0
    while prob > limit:
        prob = prob * (1/6.0)*((5/6.0)**n-1)
        n +=1
    return n-1
于 2012-12-09T11:52:50.503 に答える
-1
def probTest(limit):
    prob = 1.0
    n = 1
    while prob > limit:
        prob =  5/6^(n-1)*1/6.0
        n += 1        
    return n
于 2012-12-09T12:49:07.747 に答える