1系统仿真与虚拟现实实验报告学院名称软件学院专业软件工程学生姓名杨静学号3010218158年班级2010级四班2013年4月22日2目录一、随机数生成算法1、实验内容...........................................................................................42、实验原理...........................................................................................43、实现方法...........................................................................................5二、VRML建模试验1、实验内容.........................................................................................132、实验原理.........................................................................................133、实现方法.........................................................................................13三、MATLAB基本实验:MATLAB基本操作1、实验内容.........................................................................................172、实验原理.........................................................................................173、实现方法.........................................................................................18四、MATLAB进阶实验:单窗口服务模型模拟.............................261、实验内容.........................................................................................262、实验原理.........................................................................................264、实现方法.........................................................................................2635、实验结果与结果分析.....................................................................28三、总结与展望...................................................................................284一、随机数生成算法1、实验内容参考教材《系统仿真导论》DEDS01.c程序利用该程序对如下PMMLCG进行x2均匀性检验及独立性检验(α=0.05)Zi=16807Zi-1(mod231-1)样本点n=10000K=10(均匀性)N=1000j=1(独立性)修改该程序中的随机数发生器程序,实现对如下组合发生器进行x2均匀性检验及独立性检验(α=0.05)Zi=25173Zi-1+13849(mod65536)Z0=1.0Zi2=Zi-12+Zi-22(mod128)Z02=1.0Z-12=1.0样本点数:n=5000K=10(均匀性)N=1000j=1(独立性)2、实验原理均匀性检验:要求由随机数发生器产生的伪随机数Ui能均匀的分布在[0.1]区间内。最常用的方法是频率检验:将随机数发生器的取值范围[0,1]分成K个互不重叠的等长子区间,由该随机数发生器产生N个随机数Ui(i=1,2,…,N)按照均匀性的要求,随机数在每一个子区间上的概率P=1/K,即在每一个子区间上的随机数的个数理论值为n=N/K。实际上Ui在每一个子区间上的个数不会恰好等于n,而为nj(j=1,2,…,K)这样就会有偏差。频率检验就是检验实际频率与理论频率之间的偏差大小,一般用χ2检验:显然,若nj=n则χ2等于0,实际频率与理论频率一致,χ2大小反映了偏差程度,也就是随机数的均匀程度。独立性检验:独立性检验常用的方法是计算该序列相邻一定间隔的随机数之间的相关系数,然后判断其相关程度。因为相关系数为0是两个随机变量相互独立的必要条件,其值的大小可以评价相关程度对于给定的随机数发生器,由它产生N个随机数Ui,则前后相隔为j个数的相关系数均值为:其中S^2为随机数的方差:53、算法设计均与性检验:χ2检验1:原假设H0:给定随机数发生器产生的Ui是独立同分布U(0,1)的随机变量;2:将[0,1]分成K个等长子区间;3:由该随机数发生器产生N个随机数Ui;4:统计计算在每个子区间上随机数的个数nj;5:计算χ2:独立性检验:1:原假设H0:给定随机数发生器产生的Ui是独立同分布U(0,1)的随机变量,即ρ=0;2:由该随机数发生器产生N个随机数Ui,并计算ρj的均值;3:若N—j充分大(一般要50),取统计量:渐进服从标准正态分布N(0,1);4:给定检验水平α,记Z1-α为N(0,1)的上1-α的临界点,则当组合发生器:1:由Z1产生128个随机数U1,形成数组V=(U11,…,U1128)2:由Z2产生在[1,128]上分布的随机整数I,返回UI作为组合发生器的第一个随机数;3:由Z1产生一个随机数取代UI;4:由Z2生成新的I,依次下去;4、实现方法第一部分:/*======================================Theprogramisusedtotesttheuniformandthedependenceofarandomgenerator.*/#includestdio.h#includestdlib.h#includemath.hintSUB1();6doubleSUB2();intnvalue;doubleprobd[25];longinta1,c1,m1,x1;intmain(void){inti,m;floatmn;intntypes,nx[20],number,number1;longintz0,a0,c0,m0,x0;doublex,xx1,y,yy1,yy2,ro1,ro2;doublexka2,squ;/*==============Followingistotesttheuniform===================*/printf(\nFollowingistotesttheuniform.);printf(\nInputthenumberofarea:);scanf(%d,&ntypes);printf(\nInputthenumberofrandomvariable:);scanf(%d,&number);printf(\na,c,mistheparamentoftherandomgenerator;);printf(\nz0istheseedofthisrandomgenerator.);printf(\nInputa,c,m,z0=);//segmentaionfaultscanf(%d,%d,%d,%d,&a1,&c1,&m1,&x1);printf(somethingwrong);a0=a1;c0=c1;m0=m1;x0=x1;z0=x1;x=1.0/ntypes;probd[1]=x;for(i=2;i=ntypes;i++)probd[i]=x+probd[i-1];for(i=1;i=ntypes;i++)nx[i]=0;nvalue=ntypes;for(i=1;i=number;i++){m=SUB1();nx[m]=nx[m]+1;}mn=(float)number/(float)ntypes;xka2=0.0;for(i=1;i=ntypes;i++){7squ=nx[i]-mn;xka2+=squ*squ/mn;}printf(\na=%f,c=%f,m=%d,z0=%f,);printf(\nThenumberofrandom=%d,a1,c1,m1,z0,number);for(i=1;i=ntypes;i++){printf(\nNumber(%d)=%d,i,nx[i]);}printf(\nCHI-SQUARE=%f,xka2);/*======Followingistotesttheindependence==============*/printf(\nFollowingistotesttheindependence.);printf(\nInputthenumberofrandomvariable1);scanf(%d,&number1);a1=a0;c1=c0;m1=m0;x1=x0;z0=x1;x=SUB2();yy1=0.0;yy2=x;xx1=(x-0.5)*(y-0.5);for(i=2;i=number1;i++){y=SUB2();xx1+=(y-0.5)*(y-0.5);yy1+=x*y;yy2+=y;x=y;}yy1/=(number1-1.0);yy2/=number1;yy2*=yy2;xx1/=(number1-1.0);ro1=(yy1-yy2)/xx1;ro2=fabs(ro1)*sqrt(number-1.0);printf(\nRo=%f,u=%f,ro1,ro2);printf(\n===================SimulationResults================);printf(\n\na=%f,c=%f,m=%d,z0=%f,a1,c1,m1,z0);printf(\n====================TheUniform===================);for(i=1;i=ntypes;i++)printf(\nNumber(%d)=&d,i,nx[i]);printf(\nTotal_number=%d,cCHI_SQYARE=%f,number,xka2);printf(\n===================TheIndependence================);8printf(\nNumberofsamples=%dRO=%fu=%f,number1,ro1,ro2);return0;}intSUB1(){doubleu;inti;u=SUB2();for(i=1;invalue;i++)if(uprobd[i])return(i);return(nvalue);}doubleSUB2(){x1=(a1*x1+c1)%m1;return((double)x1/(double)m1);}第二部分:/*======================================Theprogramisusedtotesttheuniformandthedependenceofarandomgenerator.*/#includestdio.h#inclu