抛掷硬币模拟实验原理 (模拟掷硬币实验)

1 实验目的

(1)通过抛硬币实验来验证频率具有稳定性。

(2)学会使用Python作图

2 实验要求

(1)复习大数定律。

(2)画图显示运行结果。

3 知识链接

随机实验具有如下三个特征。

(1)可重复进行。

(2)实验的可能结果不止一个,事先知道所有的可能结果,但是每次实验前不知道会出现哪种结果。

(3)做大量的实验,结果具有统计规律性。

在相同条件下进行大量重复实验,随机事件会呈现出一定的规律性,这种规律性由事件本身决定,是客观存在的。可根据某事件在大量重复实验中出现的次数来度量该事件出现的可能性。

在相同条件下进行重复实验,若事件A在n次实验中出现了k次,则称k为这n次实验中事件A出现的频率,比值k/n为事件A出现的频率,记作f(A),即f(A)=k/n。

大量重复实验会呈现统计学规律性。例如,抛硬币实验中正面向上事件的频率的稳定值为0.5.在相同条件下进行大量重复实验,某事件频率的稳定值称为概率。

伯努利大数定律: 设n是伯努利实验中事件A发生的次数,p是事件A在每次实验中发生的概率,则对任意ε>0,有

实验抛硬币视频,用excel模拟抛硬币实验

伯努利大数定律表明,当重复实验次数n充分大时,事件A发生的频率nA/n依概率收敛于事件A发生的概率p。

伯努利大数定律用严格的数学形式表达了频率的稳定性。在实际应用中,当实验次数很大时,便可以用事件发生的频率来近似代替事件的概率。

4 实验内容

利用Python编写程序,以产生一系列0和1的随机数,模拟硬币实验。验证抛一枚质地均匀的硬币,正面向上事件频率的稳定值为0.5。

(1)实验步骤

①生成0和1的随机数序列,将其放入列表count,也可用函数表示。

②统计0和1出现的次数,将其放入a中。a[0]、a[1]分别表示0和1出现的次数。

③画图展示每次实验正面向上事件的频率。

(2)程序代码

1)方法1:使用Counter函数进行计算

from collections import Counter
import matplotlib.pyplot as plt
import random
times=10000
# 将每次随机出现的数字放入列表count
count=[]
for i in range(1,times+1):
    y=random.randint(0,1)
    count.append(y)
# 统计0和1出现的次数,计算频率,1表示正面向上
# 直接统计每个数字出现的次数
a=Counter(count)
f1=a[1]
print(f1/times)
# 画图展示每次实验正面向上事件的频率
# 存储正面向上事件的频率
f=[]
indices=[]
# i表示做实验的次数
for i in range(1,times + 1):
    # 做i次正面向上事件的次数
    heads=0
    for j in range(i):
        if count[j]==1:
            heads+=1
        # 计算频率
    f.append(heads/i)
    # 第i次实验
    indices.append(i)
plt.plot(indices,f)
plt.show()

2)方法2:不使用Counter函数进行计算

import matplotlib.pyplot as plt
import random
times=10000
# 将每次随机数出现的数字放入列表
count=[]
for i in range(1,times+1):
    y=random.randint(0,1)
    count.append(y)
# 统计0和1出现的次数,计算频率,1表示正面朝上
s1=0
s2=0
for k in count:
    if k == 0:
        s1+=1
    else:
        s2+=1
f1=s2
print(f1/times)
# 画图展示每次实验正面向上事件的频率
# 存储正面向上事件的频率
f=[]
indices=[]
# i表示实验次数
for i in range(1,times + 1):
    # 做i次实验正面向上事件的次数
    heads=0
    for j in range(i):
        if count[j]==1:
            heads+=1
# 计算频率
    f.append(heads/i)
    indices.append(i)
plt.plot(indices,f)
plt.show()

3)自定义函数

import matplotlib.pyplot as plt 
import random 
def r(): 
	s=random.randint(0,1) 
	return s 
times=5000 
count=[] 
for i in range(1,times+1): 
	count.append(r()) 
s1=0 
s2=0 
for k in count: 
	if k == 0: s1+=1 
	else: s2+=1 print(s2/times)
# 画图展示每次实验正面向上事件的频率 
# 存储正面向上事件的频率 
f=[] 
indices=[] 
# i表示做实验的次数 
for i in range(1,times + 1): 
# 做i次正面向上事件的次数 
	heads=0 
	for j in range(i): 	
  		if r()==1: 
      	heads+=1 
# 计算频率 
	f.append(heads/i)
# 第i次实验
	indices.append(i) 
plt.plot(indices,f) 
plt.show()

实验抛硬币视频,用excel模拟抛硬币实验

运行结果:

0.5004