随机模拟与实验上机报告_第1页
随机模拟与实验上机报告_第2页
随机模拟与实验上机报告_第3页
随机模拟与实验上机报告_第4页
随机模拟与实验上机报告_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、随机模拟与实验上机报告一 随机模拟的典型步骤1、根据问题构建模拟系统 2、仿真系统中各种分布的随机变量3、运行模拟系统,进行统计测量 4、分析数据,输出结果二 随机模拟的主要工具基本工具:C、C+等编程模拟、matlab 网络模拟:OPNET Modeler、NS2:大型网络仿真CASSAP:数字信号处理;SPW:电子系统三 实验原理1、 伪随机数产生函数:unsigned int CMyRand:MyRand(unsigned int seed)实现思路:利用线性同余法,设置y0,即设置种子yn=kyn-1(mod N),un=yn/N 即(ran0) N=231-1,k=75,周期2109

2、2、 平均分布随机数产生函数:double CMyRand:AverageRandom (double min,double max)实现思路:C语言中的rand函数可以产生01间隔均匀分布随机数,要产生minmax范围内精度为四位小数的随机数,则只需将该数小数点右移四位强制取整即可获得整数范围内的随机数,采用对(max-min)求余再加上min并将获得的结果缩小10000倍即可。3、 正态分布随机数产生函数double CMyRand:NormalRandom(double miu, double sigma, double min, double max) 实现思路:利用中心极限定理,通过

3、多个独立的均匀随机变量之和构成正态随机变量, 产生均值为miu,方差为sigma的正态分布的随机数x设UiU(0,1),i=1,2,n,且相互独立,由中心极限定理可知,当n较大时 Z=i=1nUi-nEUinDUiN0,1实验中取n=15,EUi=1-02=0.5,DUi=1-0212=112再用变换公式x=Z*sigma+miu可以得到正态分布随机数4、 指数分布随机数产生函数double CMyRand:ExpRandom(double lambda, double min, double max)实现思路:利用逆变换法产生参数为的指数分布,其指数分布函数为 Fx=1-e-x 其反函数为

4、X=F-1U=-1ln1-U因此,X的模拟方法为,先产生均匀分布随机数ui;再计算指数分布随机数:xi=-lnui5、 泊松分布随机变数产生函数unsigned int CMyRand:PoisonRandom (double lambda, double min, double max) 实现思路:由于pi+1=i+1e-i+1!=i+1pi,所以采用递推法构成泊松分布1) 产生0,1均匀分布随机数u2) i=0,p=e-,F=p3) 若u0时 PXnXn+m=I2=k=0m2k2k!e-m PXnXn+m=-I2=k=0m2k+12k+1!e-m Rxm=I2e-2m 四 代码编译/ My

5、Rand.cpp: implementation of the CMyRand class./#include stdafx.h#include random.h#include MyRand.h#include math.h#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE=_FILE_;#define new DEBUG_NEW#endif/ Construction/Destruction/CMyRand:CMyRand()CMyRand:CMyRand()void CMyRand:MyRandInit(void)N = 0x7FFFFF

6、FF; /231-1K = 16807; /75srand(int)time(0);seed=3;/rand();/seed = 2;seed+;/*函数功能,采用线性同余法,根据输入的种子数产生一个伪随机数,如果种子不变, 则将可以重复调用产生一个伪随机序列。 利用CMyRand类中定义的全局变量:S, K, N, Y。 其中K和N为算法参数,S用于保存种子数,Y为产生的随机数。*/unsigned int CMyRand:MyRand(unsigned int seed)if(S=seed)Y=(Y*K)%N;else seed+;S=seed;Y=(seed*K)%N;if(Y=0) s

7、rand(int)time(0);Y=rand(); return Y;/*函数功能,产生一个在minmax范围内精度为4位小数的平均分布的随机数。min和max代表该均匀随机变量的取值范围,精确到小数点后4位。该参数在randomDlg.cpp中OnAverage ()和OnAverageStat()函数中已经设置。*/double CMyRand:AverageRandom(double min,double max)double dResult;dResult = 0;int min1 = (int)(min*10000);int max1 = (int)(max*10000);int

8、rand1 = MyRand(seed);int dif1 = max1 - min1;int result1 = rand1 % dif1 + min1;dResult=result1/10000.0;return dResult;/*函数功能,在min 到max 范围内产生正态分布的随机数。miu,最大概率密度处的随机变量,即产生的随机数中,概率最大的那个sigma。miu为均值, sigma为方差, min和max 为均匀分布随机变量的取值范围。 所有参数在randomDlg.cpp的OnNormal()和OnNormalStat()函数中设置。*/double CMyRand:Norm

9、alRandom(double miu, double sigma, double min, double max)double dResult;dResult = 0;int i,n;double sum=0.0;n=15;for(i=0;i=F)p=lambda*p/(i+1);F=F+p;i=i+1;dResult=i;return dResult;/*函数功能,计算任意分布的随机过程的均值。*/double CMyRand:Ex(void)double Ex = 0;int i;double sum=0;for(i=0;i100;i+)sum+=AverageRandom(0,10);

10、 Ex=sum/i;return Ex;/*函数功能,计算随机过程的自相关序列。lambda为泊松过程的参数, points为输入随机数序列的个数。所有参数在randomDlg.cpp的OnSelfStat () 函数中设置。*/double* CMyRand:Rx(double lambda, int points)int m,I;double *Rx = (double*)malloc(2*points+1)*sizeof(double);/添加自相关序列产生代码/产生的自相关序列存入Rx中,Rx可当作数组使用/不要在本函数中释放该数组!I=6;int j;for(j=0,m=-1*poi

11、nts;m=points;j+,m+)*(Rx+j)=I*I*exp(-2*lambda*abs(m);return Rx;五 实验执行结果均匀分布均匀统计正态分布正态统计指数分布指数统计泊松分布泊松统计均值 取AverageRandom(0,10)自相关 取I=6六 实验小结 这次实验实际上需要自己编写的代码不多,而且当每种随机数产生的原理知道后,就可以以之为算法,然后按照编程语言的规则来些。但是,可能之前概率论没学好,所以有些相关的知识自己就并不知道,除了上课讲的一些随机数产生的原理如指数分布,泊松分布,正态分布,指数分布等,另有如四位精度的均匀分布的算法要比其他的复杂一些,所以在编写程序的时候开始确实不知道怎么写,于是上网查找了一些资料才明白过来,而且其中有

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论