- 1、本文档共28页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
隨机数生成原理实现方法不同编程语言的随机数函数
1-0:Microsoft VC++产生随机数的原理:
Srand ( )和Rand( )函数。它本质上是利用线性同余法,y=ax+b(mod m)。其中a,b,m都是常数。因此rand的产生决定于x,x被称为Seed。Seed需要程序中设定,一般情况下取系统时间作为种子。它产生的随机数之间的相关性很小,取值范围是0—32767(int),即双字节(16位数),若用unsigned int 双字节是65535,四字节是4294967295,一般可以满足要求。
1-1: 线性同余法:
其中M是模数,A是乘数,C是增量,为初始值,当C=0时,称此算法为乘同余法;若C≠0,则称算法为混合同余法,当C取不为零的适当数值时,有一些优点,但优点并不突出,故常取C=0。模M大小是发生器周期长短的主要标志,常见有M为素数,取A为M的原根,则周期T=M-1。例如:
a=1220703125
a=32719 (程序中用此组数)
a=16807
代码:
void main( )
{
const int n=100;
double a=32719,m=1,f[n+1],g[n],seed;
m=pow(2,31);
cout设置m值为 m-1endl;
cout输入种子endl; //输入种子
cinseed;
f[0]=seed;
for(int i=1;i=n;i++) //线性同余法生成随机数
{
f[i]=fmod((a*f[i-1]),(m-1));
g[i-1]=f[i]/(m-1);
cout.setf(ios::fixed);cout.precision(6); //设置输出精度
couti \tg[i-1]endl;
}
}
结果分析:统计数据的平均值为:0.485653
统计数据的方差为:0.320576
1-2:人字映射
递推公式
就是有名的混沌映射中的“人字映射”或称“帐篷映射”,它的非周期轨道点的分布密度函数:人字映射与线性同余法结合,可产生统计性质优良的均匀随机数。
for(int i=1;i=n;i++) //线性同余法生成随机数
{
f[i]=fmod((a*f[i-1]),m);
if(f[i]=m/2) //与人字映射结合生成随机数
{
f[i]=2*f[i];
}
else
{
f[i]=2*(m-f[i])+1;
}
1-3:平方取中法——冯?诺伊曼
1946年前后,由冯?诺伊曼提出,他的办法是去前面的随机数的平方,并抽取中部的数字。例如要生成10位数字,而且先前的值是5772156649,平方后得到33317792380594909201,所以下一个数是7923805949。
for(j=1;j=n;j++)
{
i[j]=i[j-1]*i[j-1];
i[j]=i[j]/pow(10,5);
i[j]=fmod(i[j],pow(10,10));
g[j]=i[j]/pow(10,10);
cout.setf(ios::fixed);cout.precision(6); //设置输出精度
coutj\tg[j]endl;
}
二:任意分布随机数的生成
利用(0,1)均匀分布的随机数可以产生任意分布的随机数。主要的方法有反函数法,舍选法,离散逼近法,极限近似法和随机变量函数法等。这里主要讨论了反函数法,当然对于具体分布函数可以采用不同的方法。
设随机变量X具有分布函数F(X),则对一个给定的分布函数值,X的值为
其中inv表示反函数。现假设r是(0,1)均匀分布的随机变量R的一个值,已知R的分布函数为
因此,如果r是R的一个值,则X具有概率
也就是说如果 (r1,r2,...,rn)是R的一组值,则相应可得到的一组值
具有分布。从而,如果我们已知分布函数的反函数,我们就可以从
您可能关注的文档
- 隧道工程畢业设计任务书.doc
- 隧道施工技術与方法(上).docx
- 隧道施工技術总结.doc
- 隧道施工斷面快速测量方法.docx
- 隧道施工斷面快速测量方法2006011020465726.doc
- 隧道施工方法及其基本作業.doc
- 隧道施工測量外业及内业数据处理.doc
- 隧道施工測量实习报告.doc
- 隧道施工測量技术交底.doc
- 隧道施工測量课程设计完整版.doc
- 英语人教PEP版八年级(上册)Unit4+writing+写作.pptx
- 人美版美术四年级(上册)8 笔的世界 课件 (1).pptx
- 人美版美术七年级(上册)龙的制作.pptx
- 英语人教PEP版六年级(上册)Unit 2 第一课时.pptx
- 数学苏教版三年级(上册)3.3 长方形和正方形周长的计算 苏教版(共12张PPT).pptx
- 音乐人教版八年级(上册)青春舞曲 课件2.pptx
- 音乐人教版四年级(上册) 第一单元 音乐知识 附点四分音符|人教版.pptx
- 英语人教PEP版四年级(上册)Unit 6 Part B let's learn 1.pptx
- 道德与法治人教版二年级(上册)课件-3.11大家排好队部编版(共18张PPT).pptx
- 人美版美术七年级(上册)《黄山天下奇》课件1.pptx
文档评论(0)