- 积分
- 38420
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2011-6-20
- 最后登录
- 1970-1-1
成长值: 0
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 言深深 于 2011-10-8 17:23 编辑
众所周知fortran内部内置一张随机数表,我们选取的时候就是从随机数表的某一项开始,往下顺次抽取需要的个数,但是往往系统内置的随机数相邻两个数产生的时候内在动力学相关性比较大,为此我们需要重新挑选随机数,于是我用随机数作为选取状态变量,随机从已经产生的m个伪随机数中选择n个数:
parameter(m=10000,n=1000,ns=100,k=1)
!m:产生伪随机数的序列长度
!n:产生新的随机数个数
!ns:构建随机位置序列的初始选择,可以随便写,保证每次产生的随机数不一样
!x数组存放的是原始伪随机数
!y数组存放的是新随机数
!r数组里面存放的是抽取随机数的标签
!k是随机数振幅
real x(m),y(n),r(n)
iseed=1
do i=1,m
x(i)=ran(iseed)
enddo
do i=ns,ns+n-1
r(i-ns+1)=mod(int(x(i)*m),n)
if(r(i-ns+1).eq.0..and.i.ne.1)then
r(i-ns+1)=int((r(i-ns+1)+r(1))/2) !此处判断抽取的随机序号不为0
endif
enddo
do i=1,n
y(i)=x(r(i))*k
enddo
open(1,file="ran rand.txt")
do i=1,n
write(1,"(f20.5)") y(i)
enddo
close(1)
end
|
评分
-
查看全部评分
|