2017-01-26 4 views
0

私は110の独立したイベントの確率を持っています。 私はすべての数のイベントについて計算したいと思います。その数の異なるイベントが表示されます。我々は唯一の3つのイベントN個のイベントのうちM個が出現する可能性を計算する

A = 0.45 
B = 0.65 
C = 0.73 

# Probability of none event 
P[0] = (1-A)*(1-B)*(1-C) 

# Probability of exaclty one event 
P[1] = A*(1-B)*(1-C)+(1-A)*B*(1-C)+(1-A)*(1-B)*C 

# Probability of exactly two events 
P[2] = A*B*(1-C)+A*(1-B)*C+(1-A)*B*C 

# Probability of exactly three events 
P[3] = A*B*C 

を持っている場合

例では、1時間の下に110回のイベントのためにそれを計算するのは現実的ですか?

「はい」の場合、どのようにプログラミング言語で行うのですか?

答えて

2

確率をp_1、p_2、...、p_nとします。あなたは本質的に多項式を拡張しようとしています

(1 - p_1 + p_1 x) (1 - p_2 + p_2 x) ... (1 - p_n + p_n x), 

ここで、m個のイベントを得る確率はx^mの係数です。すべての2^n単項式を計算し、それらを合計するのではなく、各乗算の後に単純化することができます。 Pythonで:

def f(ps): 
    coefs = [1] 
    for p in ps: 
     coefs.append(0) 
     for i in range(len(coefs) - 1, 0, -1): 
      coefs[i] = coefs[i] * (1 - p) + coefs[i - 1] * p 
     coefs[0] *= 1 - p 
    return coefs 

サンプル実行(浮動小数点エラーに注意してください)。

>>> f([0.45, 0.65, 0.73]) 
[0.05197500000000001, 0.279575, 0.454925, 0.21352500000000002] 
関連する問題