1泊松过程仿真一、仿真内容及目的1.1仿真内容首先查阅相关资料,学习如何在仿真环境下对随机过程进行仿真。然后在C语言、MATLAB等环境下,结合泊松过程的相关理论知识,设计算法及程序对泊松过程进行仿真实验。最后对得到的实验结果进行分析。1.2仿真目的利用仿真实验,将泊松过程这一抽象的概念图形化、数字化、具体化,生成样本进行描述分析。加深对泊松过程这一抽象概念的认识和理解,其次掌握如何运用仿真工具对所学的理论知识进行仿真模拟,增强自己的动手能力和自学能力。二、实验原理计数过程定义:设N(t)表示到时刻t为止已发生的“事件A”的总数,若N(t)满足下列条件:(1)N(t)0;(2)N(t)取正整数值;(3)若ts,则N(s)N(t);(4)当ts时,N(s)-N(t)表示区间(s,t]中发生的“事件A”的次数。则称随机过程0}t{N(t),为计数过程。泊松过程定义:一个计数过程0}{N(t),,具有参数0,若它满足下列条件:(1)N(t)=0;(2)N(t)是独立增量过程;(3)在任一长度为t的区间内,事件发生的次数服从参数0的泊松分布,即对任意事件S,0t,有,....1,0,!)(en}N(s)-s)P{N(tt-nntn则称0}t{N(t),为泊松过程。2根据以上定义,令随机变量)1(Tnn表示从第(n-1)次事件发生到第n次事件发生的时间间隔,则可以证明,nT服从互相独立但参数为的相同指数分布。因为只要按照参数产生指数分布的随机时间间隔序列,并计数系统随时间运行的过程中,按这个时间间隔序列对系统状态进行加1计数,则这个计数系统就对应了参数为的泊松过程。三、仿真环境及算法3.1仿真环境C语言、MATLAB2.2仿真算法时间区间为[0,T],泊松过程的速率为。(1)令当前时刻t=0,泊松事件计数值N=0,使其满足泊松过程定义的第一个条件;(2)在MATLAB中,利用rand()函数生成(0,1)上均匀分布的随机数U,利用逆变换法得到指数分布随机数E,即令)(ln1-EU;(3)令t=t+E,如果tT,则停止;(4)令N=N+1并设ttN;(5)回到第2步。四、仿真结果及分析根据上述算法,我主要在C语言和MATLAB环境下做了仿真。C语言环境下能模拟出泊松过程的数据但不够清晰、直观,所以最后想到在MATLAB环境仿真,将得到的数据图形化,这样便于分析理解。主要仿真如下:4.1C语言环境下这里设置时间区间为(0,10),即T=10,=1。实验结果:3图1:第一次运行结果图2:第二次运行结果结果分析:分别执行两次程序,分别得到两个不同的实验结果,分别如图1,图2所示。由图1可以看出该事件总共发生了13次,发生的时间从小到大分别为:0.756124,1.065722,1.419995,2.923336,4.866784,5.304658,5.310878,5.425449,5.481566,7.207677,7.541941,9.279402,9.499325;同理可以从图2可以知道该事件发生的次数和对应的时间。4.2MATLAB环境下这里设置样本函数1的时间区间为(0,15),=1;样本函数2的时间区间为(0,15),=2。实验结果:4图3:第一次仿真波形图4:第一次仿真结果0510150510152025泊松过程时间t计数过程N(t)样本函数1样本函数25图5:第二次仿真波形图6:第二次仿真结果结果分析:运行两次程序,得到两组数据,图3和图4位第一次运行程序得到的实验结果,图5和图6为第二次运行程序得到的实验结果。图4为泊松过程产生的数据,x1表示样本函数1对应的时间节点,y1为样本函数1的时间节点所对应的事件发生次数;根据图4的样本数据得到图3的波形图,由图中可以看出,整个过程是递增的,并且可以找到每个时间节点所对应的事件发生次数。因为整个过程是随机的,所以我们可以看到图5和图6得到的实验结果和第一次得到的实验结果不大一样,但总体趋势都是递增的。051015051015202530泊松过程时间t计数过程N(t)样本函数1样本函数26五、实验代码C语言代码#includestdio.h#includemath.h#includestdlib.hintmain(){intN=0,T=10;doubleU,E;doublet=0;doublelamda=1.0;printf(时间t%d:%lf,发生的次数N:%d\n,N,t,N);srand((unsigned)time(NULL));//初始化随机数while(1){U=rand()/(RAND_MAX+1.0);E=-(1/lamda)*log(U);t=t+E;if(tT)break;else{N=N+1;printf(时间t%d:%lf,发生的次数N:%d\n,N,t,N);}}return0;}7MATLAB代码%样本函数1lamda1=1.0;T1=15;t1=0;N1=0;x1=[];y1=[];x1(1)=0;y1(1)=0;whilet1T1;U1=rand();E1=-(1/lamda1)*log(U1);t1=t1+E1;if(t1T1)N1=N1+1;x1(N1+1)=t1;y1(N1+1)=N1;endendy1x1%样本函数2lamda2=2.0;T2=15;t2=0;N2=0;x2=[];y2=[];x2(1)=0;y2(1)=0;whilet2T2;U2=rand();E2=-(1/lamda2)*log(U2);t2=t2+E2;if(t2T2)N2=N2+1;x2(N2+1)=t2;y2(N2+1)=N2;endendy2x2stairs(x1,y1,'r-');holdonstairs(x2,y2,'k-');title('泊松过程')xlabel('时间t')ylabel('计数过程N(t)')legend('样本函数1','样本函数2',2)title('泊松过程')xlabel('时间t')ylabel('计数过程N(t)')