验证正弦函数是否符合中心极限定理
中心极限定理是指:每次从这些总体中随机抽取 n 个抽样,一共抽 m 次。 然后把这 m 组抽样分别求出平均值, 这些平均值的分布接近正态分布。
代码如下:
import random, math, matplotlib.pyplot as plt, seaborn count = 1000000 def getSinDataList(): minV, maxV = -2*500*math.pi, 2*500*math.pi datalist = [] for i in range(count): datalist.append(math.sin(minV + (maxV-minV)*i/count)) return datalist def getRandom(): return int(random.uniform(0,count-1)) def getOneAverage(sinDatalist,n): result = 0 for i in range(n): result += sinDatalist[getRandom()] return result / n def getMAvaerage(m,n): sinDatalist = getSinDataList() datalist = [] for i in range(m): a = getOneAverage(sinDatalist,n) datalist.append(a) return datalist if __name__ == "__main__": while True: print("please input two integers, m and n:") m, n = input().split() m, n = int(m), int(n) datalist = getMAvaerage(m,n) seaborn.violinplot(datalist) plt.title(("m=%d,n=%d")%(m,n)) plt.show()
运行效果如图:
import random, math, matplotlib.pyplot as plt, seaborn
count = 1000000
def getSinDataList():
minV, maxV = -2*500*math.pi, 2*500*math.pi
datalist = []
for i in range(count):
datalist.append(math.sin(minV + (maxV-minV)*i/count))
return datalist
def getRandom():
return int(random.uniform(0,count-1))
def getOneAverage(sinDatalist,n):
result = 0
for i in range(n):
result += sinDatalist[getRandom()]
return result / n
def getMAvaerage(m,n):
sinDatalist = getSinDataList()
datalist = []
for i in range(m):
a = getOneAverage(sinDatalist,n)
datalist.append(a)
return datalist
if __name__ == "__main__":
while True:
print("please input two integers, m and n:")
m, n = input().split()
m, n = int(m), int(n)
datalist = getMAvaerage(m,n)
seaborn.violinplot(datalist)
plt.title(("m=%d,n=%d")%(m,n))
plt.show()