<p>与其尝试匹配浮点数,不如尝试为每个可能的和匹配期望值。这就相当于你试图做的事情,因为(观察数)/(试验次数)=(理论概率)当且仅当观察数等于预期数。当转鼓数是36的倍数时,这些值始终是整数。因此,如果转鼓的数量不是36的倍数,那么你的观察结果就不可能与期望值完全相等。在</p>
<p>要得到期望值,请注意,出现在各种和的确切概率中的分子(1,2,3,4,5,6,5,4,3,2,1分别为和2,3,…,12)中的分子是</em>如果掷骰子36次,则是总和的期望值。如果骰子掷36i次,则将这些分子乘以i,得到期望的和值。下面的代码模拟将一对公平骰子重复掷36次,累计总计数,然后与预期计数进行比较。如果有一个完美匹配,则返回获得匹配所需的试验次数(其中一次试验为36轮)。如果<code>max_trials</code>没有发生这种情况,则给出一个表示最终计数与最终期望值之间差异的向量:</p>
<pre><code>import random
def roll36(counts):
for i in range(36):
r1 = random.randint(1,6)
r2 = random.randint(1,6)
counts[r1+r2 - 2] += 1
def match_expected(max_trials):
counts = [0]*11
numerators = [1,2,3,4,5,6,5,4,3,2,1]
for i in range(1, max_trials+1):
roll36(counts)
expected = [i*j for j in numerators]
if counts == expected:
return i
#else:
return [c-e for c,e in zip(counts,expected)]
</code></pre>
<p>以下是一些典型的输出:</p>
^{pr2}$
<p>在一对公平骰子的3600万次模拟掷骰子中,不仅没有观察到准确的预期值,而且在最终状态下,观察值与期望值之间的差异变得相当大(在绝对值上,<em>相对</em>差异接近于零,正如大数定律预测的那样)。这种方法不太可能产生完美的匹配。一个可行的变化(同时仍然关注期望值)是迭代,直到观测值通过卡方拟合优度检验,与理论分布进行比较。在这种情况下,就没有理由再关注36的倍数了。在</p>