Monte Carlo 标准偏差 python

Monte Carlo standard deviation python

您好,我试图用 Monte Carlo 方法解决 python 中的一个问题。问题如下: 一家服务笔记本电脑的公司。对其记录的审查表明,服务呼叫所花费的时间呈正态分布,平均值为 60 分钟,标准差为 20 分钟。 一种。不到一小时的服务呼叫比例是多少? b.超过 50 分钟的服务呼叫比例是多少? C。超过 80 分钟的服务呼叫比例是多少? d.如果服务呼叫已超过 1 小时,则超过 70 分钟的概率是多少? d.在四个通话的随机样本中,平均通话时间少于一个 50 分钟的概率是多少?

我的解决方案:

import math
import random
calls = 4
sa = 0
sb = 0
sc = 0
sd = 0
sd2 = 0
se = 0
sumMin = 0
for i in range (1,calls):
    r = 60 + 20.* random.randint(1, calls)
    #print(r)
    if r<60:
        sa = sa + 1
        break
    if r > 50:
        sb = sb + 1
        break

    if r > 80:
        sc = sc + 1
        break

    if r > 60:
        sd2 = sd2 + 1
        break

    if r > 60:
        sd = sd + 1
        break
    break
sumMin = sumMin + r
meanCallsl = sumMin / calls
if meanCallsl < 50:
    se = se + 1

对于 a,b,c,d 以下条件

pa = 100 * sa/ calls
print (pa)

pb = 100 * sb / calls
print(sb)

pc = 100 * sd / calls
print(pc)

pd = 100*sd/sd2
print (pd)

pe = 100 * se/calls
print(pe)

虽然不知道结果如何,请指点一下好吗?

谢谢

首先,如果您想获得有关堆栈溢出的建议,您应该真正解释是什么让您怀疑您的代码。你只得到 0 和 1 的事实应该在你的 main post 中。这是因为你不应该在你的代码中写 break 。

我假设您以前在 MATLAB 中编程过,您需要在其中编写端到端的 for 循环和 if 测试。在 python 中,这不是必需的,因为代码的缩进定义了 for 循环和 if 测试的代码块。

此外,您永远不会在代码中测试 70 分钟。我假设您想这样做来回答问题 d.

而且,为什么你有代码random.randint(1, calls)Python documentation 表示

random.randint(a, b)

Return a random integer N such that a <= N <= b. Alias for randrange(a, b+1).

这意味着您的 random.randint(1, calls) 将生成一个介于 1calls 之间的随机整数。 random.gauss 可能是您感兴趣的函数(请参阅 https://docs.python.org/3/library/random.html#random.gauss 了解文档)。