找回密码
 注册
Simdroid-非首页
查看: 1696|回复: 43

[3. Fortran] 【分享】四个fortran随机数 子程序

[复制链接]
发表于 2004-8-23 15:40:26 | 显示全部楼层 |阅读模式 来自 湖南湘潭
传四个fortran随机数 子程序,都可直接调用
其中第3,4精度较好,推荐使用.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

1

查看全部评分

发表于 2011-1-11 15:09:46 | 显示全部楼层 来自 湖南长沙
Simdroid开发平台
我的一个程序中用到随机数,在这里学习了,谢谢
回复 0 不支持 1

使用道具 举报

发表于 2004-8-27 09:50:30 | 显示全部楼层 来自 大连理工大学

回复: 【分享】四个fortran随机数 子程序

XIE XIE~~
发表于 2004-9-9 14:47:18 | 显示全部楼层 来自 哈尔滨工程大学

回复: 【分享】四个fortran随机数 子程序

haha ,谢谢啊
感动啊
发表于 2004-9-14 22:05:46 | 显示全部楼层 来自 山东济南

回复: 【分享】四个fortran随机数 子程序

随机数的分布规律有吗
 楼主| 发表于 2004-9-15 10:31:30 | 显示全部楼层 来自 湖南湘潭

回复: 【分享】四个fortran随机数 子程序

上面是均态分布,你要哪种分布的?
xiaonuo 该用户已被删除
发表于 2004-9-15 13:45:51 | 显示全部楼层 来自 大连理工大学西山生活区
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2007-1-25 20:19:16 | 显示全部楼层 来自 韩国
现在计算机产生的随机数都是伪随机数。
random_number(x) 产生一个0到1之间的随机数(x可以是向量),但是每次总是那几个数。
用了random_seed ()后,系统根据日期和时间随机地提供种子,使得随机数更随机了。

program random
   implicit none
   real :: x
   integer i
   real b(10)
   b=0
   call random_seed ()  ! 系统根据日期和时间随机地提供种子
   do i=1,10      
   call random_number (x)  ! 每次的随机数就都不一样了
  write(*,*)x
  b(i)=x
  enddo
  pause 1
  write(*,*) b
   stop
end program random
随机数系列为:
  0.9013106
  0.7115198
  0.8170254
  0.3992462
  7.4186690E-02
  0.2865099
  6.5632150E-02
  0.9054862
  0.6746532
  0.3112113
发表于 2007-2-4 20:34:51 | 显示全部楼层 来自 重庆南岸区
是个好东西,谢谢楼主了!!!!!!!!!!!
发表于 2007-3-14 09:08:51 | 显示全部楼层 来自 天津
请教版主:从你的程序看,随机数只能一个一个的生成,请问能一下生成一个指定位数的数组吗?
原帖由 ilxy 于 2007-1-25 20:19 发表
现在计算机产生的随机数都是伪随机数。
random_number(x) 产生一个0到1之间的随机数(x可以是向量),但是每次总是那几个数。
用了random_seed ()后,系统根据日期和时间随机地提供种子,使得随机数更随机了。
...
发表于 2007-6-2 20:36:13 | 显示全部楼层 来自 广东广州

怎么生成的随机数都是一样的?

我参考了那本Visual Fortran常用数值算法集中的第一个,即楼主给出的第一个生成10个随机数,为什么每次生成都是一样的?请指教!谢谢!
回复 不支持

使用道具 举报

发表于 2007-6-3 22:54:59 | 显示全部楼层 来自 上海
谢谢了,请问有正态分布吗,求区间点,是F中有函数还是要自己编
回复 不支持

使用道具 举报

发表于 2007-6-8 11:19:58 | 显示全部楼层 来自 安徽合肥
伪随机数就是每次执行产生的数列相同,所以叫伪随机。
可以把系统时间加入,产生随时间变化的种子,产生数列不同。
回复 不支持

使用道具 举报

发表于 2007-6-12 11:04:10 | 显示全部楼层 来自 新加坡

Save

谢谢,收藏先!
回复 不支持

使用道具 举报

发表于 2007-7-19 10:41:25 | 显示全部楼层 来自 湖南长沙
楼主发的四个我收藏了,但是对于程序编制的采用的何种计算方法楼主能不透露一二?

program main
implicit none
real::c(10),b(10),d(10)
integer::i
call random(b)
c=b
write(*,*)(c(i),i=1,10)
!pause 1
call random(b)
d=b
write(*,*)(d(i),i=1,10)
stop
end
subroutine random(b)
   implicit none
   real :: x
   integer i
   real b(10)
   b=0
   call random_seed ()  ! 系统根据日期和时间随机地提供种子
   do i=1,10      
   call random_number (x)  ! 每次的随机数就都不一样了
  b(i)=x
  enddo
  return
end subroutine random
我采用ILXY兄编的随机数程序,发现C和D产生的随机数还是一样的,但若是不注释掉PAUSE 1 ,产生的随机数就不一样,是不是注释掉PAUSE 1程序太快,种子也就一样?请楼主不吝赐教。
回复 不支持

使用道具 举报

发表于 2007-8-24 08:15:48 | 显示全部楼层 来自 河南
谢谢分享!
回复 不支持

使用道具 举报

发表于 2007-8-29 18:51:59 | 显示全部楼层 来自 福建福州
各位大哥,我现在不是想在0~1之间产生随机数,
比如我想在3~20之间产生随机数,那么请问怎么做呢?
回复 不支持

使用道具 举报

发表于 2008-9-17 16:52:27 | 显示全部楼层 来自 河北保定
产生不同分布的随机数的算法有谁能说说呢
回复 不支持

使用道具 举报

发表于 2008-9-20 12:45:18 | 显示全部楼层 来自 山东济南
我来说说,
首先利用上面诸位提供的fortran的rand()函数求出一系列(0~1)的均匀分布的随机数;
然后利用概率函数(不是概率密度函数)的反函数,直接求出具有该概率分布的随机数。
自己画个图,一下就明白了。
编程也很简单。甚至不用求显式的反函数,利用插值,直接搞定。

没有什么很深的东西。
回复 不支持

使用道具 举报

发表于 2008-9-20 12:55:38 | 显示全部楼层 来自 山东济南
这样任何概率分布的随机数都能生成,前提是生成具有(0~1)均匀分布的未随机数。
其实上面的重复的伪随机数已经经过数学验证,符合(0~1)均匀分布的要求,大家放心使用就是了。
如果实在不放心,可以产生足够多的(0~1)均匀分布伪随机数,然后掐头去尾就可以了,仍然保持
均匀分布伪随机数的特征。
我玩过这个方法,肯定不负大家所望。
回复 不支持

使用道具 举报

发表于 2008-10-8 14:14:58 | 显示全部楼层 来自 辽宁大连
不错。谢谢分享。
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-27 14:08 , Processed in 0.081856 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表