回 帖 发 新 帖 刷新版面

主题:产生随机数子程序  ran0(idum)

我就不懂得里面的变量 idum是用来干什么的?


      FUNCTION ran0(idum)
      INTEGER idum,IA,IM,IQ,IR,MASK
      REAL ran0,AM
      PARAMETER (IA=16807,IM=2147483647,AM=1./IM,IQ=127773,IR=2836,
     *MASK=123459876)
      INTEGER k
      idum=ieor(idum,MASK)
      k=idum/IQ
      idum=IA*(idum-k*IQ)-IR*k
      if (idum.lt.0) idum=idum+IM
      ran0=AM*idum
      idum=ieor(idum,MASK)
      return
      END

谢谢

回复列表 (共4个回复)

沙发

ran0应该是产生0到1之间的随机数
idum应该起到一个seed的作用
不同的seed产生不同的随机数

板凳

我对这个子程序,不能很好的理解。你能否举一个简单例子,帮我说明一下,好么?谢谢!
比如,我们在投骰子的时候,投一次,就是一个数。那么这个程序,能否运算一次,就得到一个【0,1】的随机数呢?

3 楼

我仔细看了下 ran0应该是产生最低标准随机数的函数 idum是个初始种子
所以给定不同的idum ran0返回就不一样
比如  idum=10
      rannumber=ran0(idum)
实际上程序处理时 一般不人工指定idum的值 而是由cpu时间或者根据当前的环境生成
比如每次重新打开matlab时内部产生的随机数是相同的 这个就是根据matlab启动action产生的seed
当然你也可以由当前时间产生seed,具体怎么弄可以按你的喜好,放缩取整都可以
所以关键是每次用 ran0 ,idum的值应该设成不同的值,这个就相当于投骰子,idom有6个值

4 楼

非常感谢,你讲得十分清楚,谢谢!

我来回复

您尚未登录,请登录后再回复。点此登录或注册