计算 N 个事件中 M 个出现的概率
Calculate probability that M out of N events will appear
我有 110 个独立事件的概率。
我想为每个事件数计算将出现的不同事件数。
例如,如果我们只有三个事件
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 个事件计算它是否现实?
如果是,如何用任何编程语言实现?
设概率为 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]
我有 110 个独立事件的概率。 我想为每个事件数计算将出现的不同事件数。
例如,如果我们只有三个事件
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 个事件计算它是否现实?
如果是,如何用任何编程语言实现?
设概率为 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]