实验环境:

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模拟实验相关推荐

  1. matlab验证Ross随机过程(第二版)P19页的结果

    Ross书上的式子为: 下面用Matlab验证最终结果ΣPi,n 取n=2000进行验证,运行时间大概是两三分钟. 代码主要思路是: 先处理2<i<n-1的情况, 代码中分别用一个for循 ...

  2. python基础教程第二版答案-《Python基础教程》(第2版修订版)中要注意的地方...

    想必现在大家学习Python都会用3.0及以上的版本了,虽然2.X的版本依然很多,但是这两年随着部分开源项目不再支持2.X版本,3.X已经成为趋势. 正是在这样的大背景下,我最近用这本<Pyth ...

  3. python基础教程第三版和第二版选哪个-python基础教程 2版和3版哪个适合新手?!...

    python基础教程 2版和3版哪个适合新手? 现在学是学python3. 两者的差异发者本身影响并不大,个别语法细微的差比如python3的print数方式使用,一些常用模块的名称差异,一些机制的差 ...

  4. 计算机系统基础第二版考试题,计算机系统基础模拟试题.docx

    -15-15-15-15 -15 -15 -15 -15 一.填空题 传统术语中,将______和______合在一起称为 CPU,而将 CPU 和内存储器合称为主机. 机器数 A7H 若被看作一个整 ...

  5. 计算机基础实验教程第二版苏州大学出版社,计算机基础实验教程

    计算机基础实验教程 (2008年机械工业出版社出版的图书) 语音 编辑 锁定 讨论 上传视频 <计算机基础实验教程>是2008年机械工业出版社出版的图书,作者是李晓宾.本书主要包括了计算机 ...

  6. c语言程序设计教程第二版张磊,C语言程序设计实验与实训指导及题解(第2版)-张磊...

    ?本书是普通高等教育"十一五"规划教材<C语言程序设计>(第2版)的配套辅导教材,全书主要包括实验指导.综合程序设计指导和习题解答三部分内容. 实验指导部分对应主教材各 ...

  7. 四川理工学院c语言上机实验答案(第二版),四川理工学院C语言实验答案

    C语言实验答案 ) 2. 编写一个程序,计算一个从键盘输入的整数的各位之和,例如输入的数是5684,该程序计算并显示5+6+8+4的值23. [答案] 5-1 #include main( ) { c ...

  8. python核心编程第二版pdf_Python Book电子书pdf版合集 Python核心高级编程第二版

    1小时学会Python.doc 51CTO下载-[Python系列].BeginningPythonFromNovicetoProfessionalSecondEdition.pdf 8.Python ...

  9. 《随机过程》第二版-Ross印刷排版勘误问题列表(转载+自己新增+持续更新中)

    列表针对的是: <随机过程>第二版-Ross(中文版) 全表如下: 页码 习题 相关内容 9 1.3(C) 随机变量至少有一个值与其均值一样大 原文为: at least one of t ...

最新文章

  1. [杭电ACM]3336Count the string
  2. 读excel图片到数据库和上传图片到数据库
  3. CM005-逆向分析过程(上篇)
  4. 开源 java CMS - FreeCMS2.4 工作流管理
  5. python html模块调用_Python html 模块简介
  6. AAAI 2018论文解读 | 基于置信度的知识图谱表示学习框架
  7. 杨森翔的书法【斗方】
  8. STM32通用定时器(原理、结构体、库函数、定时器中断每秒闪烁一次灯) —— 时钟源、分频值、重装载值
  9. 10截图时屏幕变大_手机上网课、开视频会议,如何让屏幕变大一点?
  10. latex公式对齐_Word 写公式最方便的方法
  11. linux常用的BootLoader U-boot的前世今生
  12. Flask Middle
  13. python四种方法实现去除列表中的重复元素
  14. 五脏六腑在脸上的反射区图片_“阳光运动场,亲子共成长”——赣县区白鹭乡中心幼儿园迎新年亲子趣味运动会...
  15. 秩和比RSR法算法C语言,秩和比法(用秩和比法计算权重时怎样编秩?)
  16. 18年6月英语六级第一套听力单词
  17. 基于片内Flash的提示音播放程序
  18. matlab计算复活节概率,复活节是几月几日_计算复活节日期_我爱历史网
  19. 全国计算机二级ACCESS在线,全国计算机二级《Access》操作试题及答案
  20. 模型预测控制(MPC)+逻辑控制(相平面分区控制)--matlab例程介绍

热门文章

  1. [小故事大道理] -- 蜜蜂为何不如苍蝇
  2. 关于HttpModule
  3. ERROR 1 (HY000): Can‘t create/write to file ‘/var/www/11.txt‘ (Errcode: 13)报错解决方案
  4. vue-cli 相同页面的跳转,但路由参数不同的情况下 组件状态没有更新的问题是为什么 如何解决
  5. (三)渲染优化 (与浏览器为友,共进退)
  6. Vue+iview实现自定义格式导出Excel文件
  7. vue中Router的封装以及使用
  8. 调整样式_2019年4月1日起,内河船船员适任证书样式调整成这样啦~
  9. 多用继承 android,Android温习之路之继承
  10. java剑姬_ListView和Adapter(文字列表)