您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 产生正态分布随机数及M序列
1.编制两种方法产生正态分布随机数的程序并进行验证分析;编程思路:产生正态分布随机数的两种方法:(1)统计近似抽样法:a.设{iy}是(0,1)均匀分布的随机数序列,则10()0.5yiiiiEyypydy1220()()1/12yiyiiypydyb.根据中心极限定理,当N时,112()2()~(0,1)/12NNiyiiiyNykNyxkNNNc.如需产生均值为x,方差为2x的正态分布随机变量x,只需如下计算:212~(,)/12NiixxxxNyxNN,试验证明12N时,x的统计性质就比较理想了。(2)变换抽样法:设12,yy是两个相互独立的(0,1)均匀分布的随机变量,则新变量1/21121/2212(2log)cos(2)(2log)sin(2)xyyxyy是相互独立的,服从(0,1)N分布的随机变量。利用统计近似抽样法和变换抽样法的定义及之前产生(0,1)均匀分布的随机数的基本方法如乘同余法、混合同余法等产生正态分布随机数。调试过程遇到的问题:(1)在用统计近似抽样法产生正态分布随机数时,给定,,然后用Matlab自带函数检验结果,感觉数据老对不上?解决方法:自己设定的,分别是均值,标准差,利用Matlab自带函数mean(),var()计算出来的分别是均值,方差,总觉得方差老对不上,其实是自己理解问题,var()计算出来的方差数值肯定是自己设定的标准差的平方大小左右。(2)Matlab下标从1开始;做运算两个矩阵的尺寸大小得对应上,还有调用的值一定得有值。程序运行结果分析得到的结论:(1)统计近似抽样法:050010001500200025003000350040004500-50510统计近似抽样法(1)-4-202468050100150200050100150200250300350-4-20246统计近似抽样法(2)-3-2-101234567010203040统计近似抽样法中要用产生的(0,1)序列的12个数的和,但具体哪12个,不太清楚,图(1)是:z(1)用的是x(1)~x(12),z(2)用的是x(2)~x(13),以此类推。图(2)是把原来的(0,1)序列x矩阵重新排列,成12的倍数,12行或者12列都行,按列和或者行和相加代入运算。设定的2,1.5,Matlab计算结果:图一1.9430,1.5039;图二1.9361,1.4854相比之下,第一种方法更接近理论值,当然这也与样本的大小多少脱离不了关系,图一正态分布随机数序列矩阵大小1*4096,图二正态分布随机数序列矩阵大小1*343.当然,不管哪种方法,计算出来的均值方差都与理论值接近,也少不了误差。可见,利用统计近似抽样方法可以产生正态分布随机数。(2)变换抽样法:050010001500200025003000350040004500-6-4-2024变换抽样法(1)-5-4-3-2-101234050100150200250050010001500200025003000350040004500-4-2024变换抽样法(2)-4-3-2-101234050100150200250利用课本上给的参考数值,得出(0,1)N正态分布随机数。图一0.00028113,0.9924;图二0.010419,0.9955,可见均值,标准差计算数值与给定理论值还是比较接近的。所以,变换抽样法也可以产生正态分布随机数。当然,以上方法都采用了混合同余法生成(0,1)均匀分布的随机数序列,误差大小也与所取的M,A,C有关。2.用下式产生伪随机数1((21))(mod2)npiixxc,21,npc为奇数。编程思路:混合同余法:混合同余法产生伪随机数的递推同余式为:1()(mod)iiyAyCM其中2,2,21knMkA,C为正整数,初值0y为非负数,则/iixyM是周期为2k的随机数。利用混合同余法定义,选取合适参数,来产生随机数。程序运行结果分析得到的结论:05001000150020002500300035004000450000.10.20.30.40.50.60.70.80.91伪随机序列并计算得0.4959,0.2891。均值理论值为0.5,很接近,均方差理论值为0.3333,相对于均值来讲误差大些。3.(1)用49iiixxx产生M序列;(2)以此M序列为基础产生逆M序列;(3)并将逆M序列的幅值变为-a,+a。编程思路:一段无限长二元序列121,,,,ppxxxx各元素之间满足1122iiipipxaxaxax,121,,,paaa取0或1,pa=1,适当选择121,,,paaa可以使序列以(21)pbit的最长周期循环。可以用线性反馈移位寄存器产生M序列,然后与周期为2bit的序列相异或得到逆M序列,再改变幅值即可。调试过程遇到的问题:(1)因为给的式子是49iiixxx,所以写for循环时得从10开始;(2)M序列应赋9个初值,且算0,1个数时得写到循环里面。程序运行结果分析得到的结论:010203040506070809010000.20.40.60.81M序列010203040506070809010000.20.40.60.810102030405060708090100-4-2024逆M序列0102030405060708090100-4-2024程序中检验了一个周期((21)ppN)M序列中逻辑“0”和“1”出现的次数,一个周期(2pN)逆M序列中逻辑“0”和“1”出现的次数。结果为M序列中count0=255,count1=256,满足M序列的性质:一个循环周期中逻辑“1”出现的次数比逻辑“0”出现的次数多一次;逆M序列中c0=511,c1=511,满足逆M序列的性质:一个循环周期中逻辑“1”和逻辑“0”出现的几率均等。说明移位寄存器产生的M序列是正确的。
本文标题:产生正态分布随机数及M序列
链接地址:https://www.777doc.com/doc-2701304 .html