【機率論與數理統計】python實驗
實驗一拋硬幣試驗的模擬
利用python產生一系列0和1的隨機數,模擬拋硬幣試驗。驗證拋一枚質地均勻的硬幣,正面向上的頻率的穩定值為0。5。
實驗步驟
(1)生成0和1的隨機數序列,將其放入列表count中;也可用函式表示。
(2)統計0和1出現的次數,將其放入a中。a[0],a[1]分別表示0和1出現的次數。
(3)畫圖展示每次實驗正面向上出現的頻率
import matplotlib。pyplot as plt
import random
def doss():
return random。randint(0,1)#返回隨機數 1為下,0為上
indices = [] #拋了多少次
freq = [] #儲存朝上的頻率
for toss_num in range(10,10001,10):
heads = 0 #向上的次數
for i in range(toss_num):
if doss() == 0:
heads+=1
freq。append(heads/toss_num)
indices。append(toss_num)
plt。plot(indices,freq)
plt。show()
實驗二 派的估計及其視覺化
假設有一箇中心在原點的邊長為2的正方形,並畫出其的內切圓,即圓的半徑為1,圓心在原點。向正方形中隨機的投點,從而計算圓周率。
使用隨機投點法計算圓周率時,只需要統計落在圓內的點和正方形內的點的個數,兩者的商為投點落在圓內的頻率。再由幾何概型,計算投點落在圓內的機率。由將該試驗大量重複的進行,根據貝努利大數定律,得到的頻率值近似等於機率。根據幾何概型有所以,從而計算出圓周率的近似值。
實驗步驟:
1)生成兩個系列的[-1,1]的隨機數。
2)如果點在圓內,把點標為藍色;否則標綠色。
3)統計藍色點的個數,計算頻率,從而算出圓周率的近似值。
import numpy as np
import matplotlib。pyplot as plt
# 畫單位圓
theta = np。linspace(0, 2 * np。pi, 200)
x = np。cos(theta)
y = np。sin(theta)
fig, ax = plt。subplots(figsize=(4, 4))
ax。plot(x, y, color=“darkred”)
plt。xticks([]) # 去掉座標軸的刻度等
plt。yticks([]) # 去掉座標軸的刻度等
N = 1000
count = 0
for i in range(1, N + 1):
x = np。random。uniform(-1, 1) # 產生服從[-1,1]上的均勻分佈的N個隨機數
y = np。random。uniform(-1, 1) # 產生服從[-1,1]上的均勻分佈的N個隨機數
if x ** 2 + y ** 2 < 1:
count += 1
plt。plot(x, y, ‘bo’) # 如果點在圓內,畫藍色
else:
plt。plot(x, y, ‘go’) # 不在圓內,畫綠色
p = count / N
plt。show()
pai = 4 * p
print(pai)
實驗三 二項分佈的應用
有一繁忙的汽車站,每天有大量汽車透過,設每輛車在一天的某時段出事故的機率0。0001,在某天的該時段內有1000輛汽車透過,問出事故的次數不小於2的機率是多少(利用泊松定理)?
1)先使用二項分佈的分佈函式計算X>1的機率。
2)再使用公式計算X>1的機率
對比兩個機率值。
3)使用泊松分佈的分佈函式計算X>1的機率。
4)使用公式計算X>1的機率。
5)對比使用兩個分佈計算出來機率值。
import numpy as np
from scipy。stats import binom #匯入binom
from matplotlib import pyplot as plt
# numpy。random。binomial(n,p,size=None)
# 3個引數:n表示伯努利試驗次數,p表示伯努利試驗得到正例的機率,size表示取樣次數;返回結果為出現正例的次數k。
#cdf(k, n, p) k:分佈函式自變數,n,p:分佈引數 累積機率函式(分佈函式)F ( k )
#sf(k, n, p) k:分佈函式自變數,n,p:分佈引數 殘存函式 1-F(k)
prob=binom。sf(k=1, n=1000, p=0。0001) #計算P(X<=1)
print(prob)
from scipy。stats import poisson #匯入poisson
prob1=poisson。sf(k=1, mu=1) #計算引數為1時機率P(X>1)
print(prob1)
實驗四 正態分佈的計算
設某品牌瓶裝礦泉水的標準容量是500毫升,設每瓶容量X(以毫升)是隨機變數,X~N(500,25),求:
(1) 隨機抽查一瓶,其容量大於510毫升的機率;
(2) 隨機抽查一瓶,其容量與標準容量之差的絕對值在8毫升之內的機率;
(3) 求常數C,使每瓶的容量小於C的機率為0。05。
實驗步驟:
(1)用norm。cdf()計算正態分佈的分佈函式值。normcdf(x,mu,sigma)
其中norm。cdf(x,mu,sigma)分別表示要求分佈函式的x的值,mu為期望,sigma為標準差。
(2)使用norm。cdf(510,500,5)計算。
(3),使用norm。cdf(508,500,5)- norm。cdf(5492,500,5)計算。
(4)norm。ppf(alpha,mu,sigma)計算α分位數。
from scipy。stats import norm
prob1=norm。cdf(510,500,5)
print(prob1)
prob2=norm。cdf(508,500,5)- norm。cdf(492,500,5)
print(prob2)
alpha=norm。ppf(0。05,500,5)
print(alpha)
實驗五 二維連續型分佈的相關係數
設隨機變數聯合密度函式為[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-ZvXAyQNs-1639205559720)(attachment:image。gif)],
求X、Y的期望、相關係數。
實驗步驟:
(1)設5個函式y1,y2,y3,y4,y5,分別表示!
(2)令y1中的兩個變數分別從0到2積分,使用from scipy。integrate import dblquad匯入二重積分的包,而計算二重積分的格式為dblquad(y1,0,2,lambda g:0,lambda h:2),其中前面的0,2表示x的積分限,lambda g:0,lambda h:2表示y的積分限。而且dblquad返回兩個值,一個是積分值,另一個是誤差,可設兩個變數接收結果,後面需要使用時僅用積分值即可。最終得到E(X)。
(3)令y2中的兩個變數分別從0到2積分,得到E(Y)。令y3中的兩個變數分別從0到2積分,得到E(X2)。令y4中的兩個變數分別從0到2積分,得到E(Y2)。令y5中的兩個變數分別從0到2積分,得到E(XY)。
(4)使用方差的計算公式,計算D(X),D(Y)。使用協方差的計算公式,計算協方差。再使用,求出相關係數。
from scipy。integrate import dblquad
import math
Ex, err1 = dblquad(lambda y,x:1/8*x*(x+y),0,2,lambda g:0,lambda h:2)
print(Ex)
Ey, err2 = dblquad(lambda y,x:1/8*y*(x+y),0,2,lambda g:0,lambda h:2)
print(Ey)
Ey2, err4 = dblquad(lambda y,x:1/8*y*y*(x+y),0,2,lambda g:0,lambda h:2)
print(Ey2)
Ey2, err4 = dblquad(lambda y,x:1/8*y*y*(x+y),0,2,lambda g:0,lambda h:2)
print(Ey2)
Exy, err3 = dblquad(lambda y,x:1/8*x*y*(x+y),0,2,lambda g:0,lambda h:2)
print(Exy)
Dx = (Ex2-Ex)**2
print(Dx)
Dy = (Ey2-Ey)**2
print(Dy)
cov = Exy-Ex*Ey
print(cov)
p = cov/math。sqrt(Dx*Dy)
print(p)
我建了一個python小白交流群,我會給大家分享我收集整理的各種學習資料,組織大家一起做專案練習,幫助大家匹配一位學習夥伴互相監督學習,歡迎加入
作者:m0_52427832
連結:【機率論與數理統計】python實驗_m0_52427832的部落格-CSDN部落格