fortran产生随机数方法介绍

fortran产生随机数方法介绍

ID:1090199

大小:121.50 KB

页数:13页

时间:2017-11-07

fortran产生随机数方法介绍_第1页
fortran产生随机数方法介绍_第2页
fortran产生随机数方法介绍_第3页
fortran产生随机数方法介绍_第4页
fortran产生随机数方法介绍_第5页
资源描述:

《fortran产生随机数方法介绍》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、fortran产生随机数方法介绍(附代码)注意:现在计算机产生的随机数都是伪随机数。1.0-1之间均匀分布的随机数random_number(x)产生一个0到1之间的随机数(x可以是向量),但是每次总是那几个数。用了random_seed()后,系统根据日期和时间随机地提供种子,使得随机数更随机了。programrandom  implicitnone  real::x  callrandom_seed()    !系统根据日期和时间随机地提供种子  callrandom_number(x) !每次的随机数就都不一样了  write(*,*)x  stopendprog

2、ramrandom2.任意区间均匀分布的随机数functionmy_random(lbound,ubound)implicitnone real::lbound,ubound real::len real::my_random real::t   len=ubound-lbound !计算范围大小 callrandom_number(t) !t是0-1之间的随机数 my_random=lbound+len*t returnend注意:在循环外callrandom_seed()3.产生一个随机数数组,只需加一个循环即可functionmy_random(lbound,ub

3、ound)implicitnone real::lbound,ubound real::len integersize real::my_random(size)  !size代表数组元素的个数 real::t integeri  len=ubound-lbound !计算范围大小 doi=1,10  callrandom_number(t) !t是0-1之间的随机数  my_random(i)=lbound+len*t !把t转换成lbound-ubound间的随机数 enddo returnend注意:同理在循环外callrandom_seed()4.标准正态分布随

4、机数/高斯分布随机数      (1)徐士良的那本程序集里介绍了正态分布随机数产生的原理,不过他的方法只能产生较为简单的随机数,随机数的质量并不高,特别是随机数的数目较多时。      (2)Box和Muller在1958年给出了由均匀分布的随机变量生成正态分布的随机变量的算法。设U1,U2是区间(0,1)上均匀分布的随机变量,且相互独立。令            X1=sqrt(-2*log(U1))*cos(2*PI*U2);            X2=sqrt(-2*log(U1))*sin(2*PI*U2);那么X1,X2服从N(0,1)分布,且相互独立。等于

5、说我们用两个独立的U(0,1)随机数得到了两个独立的N(0,1)随机数。 值得说明的是,该方法产生的随机数质量很高。嘻嘻,本人亲自验证过。SAS和蒙特卡罗模拟_随机数一、为什么选择SAS做蒙特卡罗模拟?为什么要用SAS做蒙卡?首先,对我来说,我只会用SAS,而且打算用SAS完成我所有的工作。当然,其他一些通用的理由有(Fan,etc.,2002):1.蒙卡是个计算密集的活,而SASBase、SASMacro、SAS/IML强大而灵活的编程能力能满足这一要求;1.做蒙卡时要用到大量的统计/数学技术,而SAS就内置了大量的统计/数学函数(在SAS/Stat和SAS/ETS)

6、;用Fortran或C++当然也是非常好的主意,只是他们缺少内置的统计函数,代码就要冗长复杂很多。二、什么是蒙卡?一个启发性例子好,开始,什么是蒙卡?了解它背景知识的最好办法当然是wiki-Monte_Carlo_method。蒙特卡罗是位于摩洛哥的一家赌场,二战时,美国LosAlamos国家实验室把它作为核裂变计算机模拟的代码名称。作为模拟方法,蒙卡以前就叫统计抽样(statisticalsampling),我们感兴趣的结果因为输入变量的不确定而不可知,但如果能依概率产生输入变量的样本,我们就可以估计到结果变量的分布。跟蒙卡对应的,还有一种模拟技术叫系统模拟,包括排队

7、、库存等模型,这些模型都跟随时间推移而出现的事件序列有关。下面举个蒙卡的例子,来自Evans,etc.(2001)的超级简化版。假设一家企业,利润是其需求量的函数,需求是随机变量。为了简化讨论,假定利润就是需求的两倍。这里输入变量就是不可控的需求,结果变量就是我们感兴趣的利润。假设需求以相同的概率取10、20、30、40、50、60这六种情况。在这样的简化下,我们就可以投一枚均匀的骰子来产生需求的样本,如果点数为1,对应得需求就是10,点数为2,需求就是20,以下类推。这样,我们的模拟过程就是:1.投骰子;2.根据骰子的点数确定需求量;3

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。