日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Ross《随机过程》(第二版)装填问题Python模拟实验

發布時間:2023/12/20 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Ross《随机过程》(第二版)装填问题Python模拟实验 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實驗環境:

python2.7

運行時重定向到輸出文件即可:

python x.py > result.log

我們打算分三種情況模擬:

一,模擬直線末端為孤立點的情況,以P6為例進行模擬

二、模擬直線最中間的點為孤立點的情況,以P5,9為例進行模擬

三、模擬直線非最中間、非末端的點為孤立點的情況,以P5,10為例進行模擬

代碼模擬思想是:

對于n個點,使用一個n-1長度的數組來放置n-1個隨機數

數組中每個元素初始為-1,表示該數兩側的點沒有連接,

后期若該元素為非-1,則表示該數兩側的點有連接,成為“相鄰數對”

對于直線兩端的端點,必須有“連續的2個-1”才表示能繼續選擇“相鄰數對”

對于直線非兩端的端點,必須有“連續的3個-1”才表示能繼續選擇“相鄰數對”

每次選擇“相鄰數對”后,都要檢查當前直線是否還能繼續放置數對,

若不能繼續放置數對,則跳出while循環,進行下一輪實驗。

-----------------------------------------------------------------------------------------------

一、首先模擬Pn(n=6),代碼如下:

#=*- coding:utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf-8') n=6 a = [-1] * (n-1) #定義一個長度為10的list print a # 100個點,來模擬101個數,初始化為-1,-1表示該數左右兩側沒有連接 #如果最終結果中有兩個數為空(-1),則表示,這兩個數之間的點是孤立的。 #如果最終結果中有一個數為空(-1),則表示,這兩個數之間沒有點孤立 #如果運行過程中存在連續三個數為空(-1),說明該輪隨機過程還沒結束,需要繼續進行。 #判斷第i個點孤立的充分必要條件是:a[i-1]!=-1并且a[i-2]!=-1def print_a(a):#輸出隨機產生的最終結果print"\n--------最終產生的點對----"print"a=",afor index,item in enumerate(a):if index==0 and item!=-1:print"1 - 2",if index==0 and item==-1:print"1 2",if index>0 and item!=-1:print '-',index+2,if index>0 and item==-1:print index+2,print"\n"print"-"*30import random Flag=0#用來判斷當前直線上是否還剩下可以選擇的數對,0表示不存在,1表示還存在可以選擇的“相鄰數對” i_nopairs=n-1#檢驗Pn是否為孤立點 i_isolated=0#統計第i個點最終被孤立的次數 i_pairs=0#統計第i個點最終不被孤立的次數 experiment=30000#總實驗次數for index in range(experiment):print"-----------------------------index=%d-------------------------------"%indexa = [-1] * (n-1)#新的一輪實驗開始,整個隊列清零while True:Flag=0point_pairs= random.randrange(0,n-1,1)#產生的隨機數∈[0,n-1),共n-1個,下標范圍是0~n-2print"point_pairs=",point_pairsif (point_pairs!=n-2 and point_pairs !=0) and point_pairs-a[point_pairs-1]==point_pairs-a[point_pairs+1]==point_pairs+1:#確保左右兩側都沒有點對,才能落子a[point_pairs]=point_pairsif point_pairs==0 and a[1]==-1:#最左側的點對,落筆時需要考慮確保第2個點和第3個點沒有連接成對a[point_pairs]=point_pairsif point_pairs==n-2 and a[n-3]==-1:#最右側的點對,落筆時需要考慮確保第2個點和第個點沒有連接成對a[point_pairs]=point_pairsprint"-"*10print a[point_pairs]print"-"*10for i in range(n-3):#檢查整條直線中是否還有可選擇“相鄰數對”的余地,如果沒有了,那么本輪實驗結束if a[i]+a[i+1]+a[i+2]==-3:#············○ a[i] ○ a[i+1] ○ a[i+2] ○············Flag=1breakif a[0]+a[1]==-2 or a[n-3]+a[n-2]==-2:#直線開頭最多只能空兩個數,表示的含義是○ ○ ○-○······Flag=1break#---------------------------------------if Flag==1:continueif Flag==0:if a[i_nopairs-1]==-1:i_isolated=i_isolated+1print(a)break #------------------------------這里對Pn進行驗證----------------------------------------------------------experiment=experiment*1.0 print"i_isolated=",i_isolated print"The ratio of ith point isolated is:",i_isolated/experiments

實驗結果是:

上述模擬實驗為30000輪,最終第6個點被孤立的頻率是11007/30000

書上理論計算P6=11/30

所以理論計算與實驗結果十分接近

--------------------------------------------------------------------------------------------------------------

二、接下來模擬Pi,n(i=5,n=9,這是對稱情況,i處于最中央),代碼如下:

#=*- coding:utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf-8') n=9 i_nopairs=5#想孤立第5個點a = [-1] * (n-1) #定義一個長度為10的list print a # 100個點,來模擬101個數,初始化為-1,-1表示該數左右兩側沒有連接 #如果最終結果中有兩個數為空(-1),則表示,這兩個數之間的點是孤立的。 #如果最終結果中有一個數為空(-1),則表示,這兩個數之間沒有點孤立 #如果運行過程中存在連續三個數為空(-1),說明該輪隨機過程還沒結束,需要繼續進行。 #判斷第i個點孤立的充分必要條件是:a[i-1]!=-1并且a[i-2]!=-1def print_a(a):#輸出隨機產生的最終結果print"\n--------最終產生的點對----"print"a=",afor index,item in enumerate(a):if index==0 and item!=-1:print"1 - 2",if index==0 and item==-1:print"1 2",if index>0 and item!=-1:print '-',index+2,if index>0 and item==-1:print index+2,print"\n"print"-"*30import random Flag=0#用來判斷當前直線上是否還剩下可以選擇的數對,0表示不存在,1表示還存在可以選擇的“相鄰數對”i_isolated=0#統計第i個點最終被孤立的次數 i_pairs=0#統計第i個點最終不被孤立的次數 experiment=128000#總實驗次數for index in range(experiment):print"-----------------------------index=%d-------------------------------"%indexa = [-1] * (n-1)#新的一輪實驗開始,整個隊列清零while True:Flag=0#每次選擇”相鄰數對“時,假定整條直線已經沒有剩下可以選擇的數對了。point_pairs= random.randrange(0,n-1,1)#產生的隨機數∈[0,n-1),共n-1個,下標范圍是0~n-2print"point_pairs=",point_pairsif (point_pairs!=n-2 and point_pairs !=0) and point_pairs-a[point_pairs-1]==point_pairs-a[point_pairs+1]==point_pairs+1:#確保左右兩側都沒有點對,才能落子a[point_pairs]=point_pairsif point_pairs==0 and a[1]==-1:#最左側的點對,落筆時需要考慮確保第2個點和第3個點沒有連接成對a[point_pairs]=point_pairsif point_pairs==n-2 and a[n-3]==-1:#最右側的點對,落筆時需要考慮確保第2個點和第個點沒有連接成對a[point_pairs]=point_pairsprint"-"*10print a[point_pairs]print"-"*10for i in range(n-3):#檢查整條直線中是否還有可選擇“相鄰數對”的余地,如果沒有了,那么本輪實驗結束if a[i]+a[i+1]+a[i+2]==-3:#············○ a[i] ○ a[i+1] ○ a[i+2] ○············Flag=1breakif a[0]+a[1]==-2 or a[n-3]+a[n-2]==-2:#直線開頭最多只能空兩個數,表示的含義是○ ○ ○-○······Flag=1break#---------------------------------------if Flag==1:continueif Flag==0:if a[i_nopairs-2]==a[i_nopairs-1]==-1:#a[i_nopairs-2] i a[i_nopairs-1]i_isolated=i_isolated+1print(a)break #------------------------------這里對Pi,n進行驗證----------------------------------------------------------experiment=experiment*1.0 print"i_isolated=",i_isolated print"The ratio of ith point isolated is:",i_isolated/experiments

?

實驗結果為:

實驗結果顯示:

第5個點為孤立的頻率是17934/128000

書上理論計算結果為9/64

所以理論計算結果與實驗結果十分接近

---------------------------------------------------------------------------------------------------------

三、接下來模擬Pi,n(i=5,n=10,這是非對稱情況,i不再處于中央),稍作修改,代碼如下:

#=*- coding:utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf-8') n=10 i_nopairs=5#想孤立第5個點a = [-1] * (n-1) #定義一個長度為10的list print a # 100個點,來模擬101個數,初始化為-1,-1表示該數左右兩側沒有連接 #如果最終結果中有兩個數為空(-1),則表示,這兩個數之間的點是孤立的。 #如果最終結果中有一個數為空(-1),則表示,這兩個數之間沒有點孤立 #如果運行過程中存在連續三個數為空(-1),說明該輪隨機過程還沒結束,需要繼續進行。 #判斷第i個點孤立的充分必要條件是:a[i-1]!=-1并且a[i-2]!=-1def print_a(a):#輸出隨機產生的最終結果print"\n--------最終產生的點對----"print"a=",afor index,item in enumerate(a):if index==0 and item!=-1:print"1 - 2",if index==0 and item==-1:print"1 2",if index>0 and item!=-1:print '-',index+2,if index>0 and item==-1:print index+2,print"\n"print"-"*30import random Flag=0#用來判斷當前直線上是否還剩下可以選擇的數對,0表示不存在,1表示還存在可以選擇的“相鄰數對”i_isolated=0#統計第i個點最終被孤立的次數 i_pairs=0#統計第i個點最終不被孤立的次數 experiment=80000#總實驗次數for index in range(experiment):print"-----------------------------index=%d-------------------------------"%indexa = [-1] * (n-1)#新的一輪實驗開始,整個隊列清零while True:Flag=0#每次選擇”相鄰數對“時,假定整條直線已經沒有剩下可以選擇的數對了。point_pairs= random.randrange(0,n-1,1)#產生的隨機數∈[0,n-1),共n-1個,下標范圍是0~n-2print"point_pairs=",point_pairsif (point_pairs!=n-2 and point_pairs !=0) and point_pairs-a[point_pairs-1]==point_pairs-a[point_pairs+1]==point_pairs+1:#確保左右兩側都沒有點對,才能落子a[point_pairs]=point_pairsif point_pairs==0 and a[1]==-1:#最左側的點對,落筆時需要考慮確保第2個點和第3個點沒有連接成對a[point_pairs]=point_pairsif point_pairs==n-2 and a[n-3]==-1:#最右側的點對,落筆時需要考慮確保第2個點和第個點沒有連接成對a[point_pairs]=point_pairsprint"-"*10print a[point_pairs]print"-"*10for i in range(n-3):#檢查整條直線中是否還有可選擇“相鄰數對”的余地,如果沒有了,那么本輪實驗結束if a[i]+a[i+1]+a[i+2]==-3:#············○ a[i] ○ a[i+1] ○ a[i+2] ○············Flag=1breakif a[0]+a[1]==-2 or a[n-3]+a[n-2]==-2:#直線開頭最多只能空兩個數,表示的含義是○ ○ ○-○······Flag=1break#---------------------------------------if Flag==1:continueif Flag==0:if a[i_nopairs-2]==a[i_nopairs-1]==-1:#a[i_nopairs-2] i a[i_nopairs-1]i_isolated=i_isolated+1print(a)break #------------------------------這里對Pi,n進行驗證----------------------------------------------------------experiment=experiment*1.0 print"i_isolated=",i_isolated print"The ratio of ith point isolated is:",i_isolated/experiment

?

實驗結果是:

由實驗結果可知,10個點中,第5個點為孤立點的頻率為:10960/80000

由書上理論可知:P5,10=P5·P6=(3/8)(11/30)=11/80

所以實驗結果與理論結果十分接近。

總結

以上是生活随笔為你收集整理的Ross《随机过程》(第二版)装填问题Python模拟实验的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。