我是初学者,尝试使用fortran 77进行一些工程实验。我使用的是Force 2.0编译器和编辑器。我有以下疑问:
答案 0 :(得分:3)
Fortran 77的标准没有指定随机数生成器,但您可以使用为此目的自由提供的任何无数源;例如,http://www.cisl.ucar.edu/zine/96/spring/articles/3.random-6.html有一个好的,可用的f77 SRAND
子程序,可供您复制和粘贴。
答案 1 :(得分:3)
Knuth对于计算机编程艺术的第3.6节中描述的伪随机数生成器有released into the public domain sources in both C and FORTRAN。
答案 2 :(得分:1)
第二个问题:
例如,如果您的文件如下所示:
hour temperature pressure humidity
00 15 101325 60
01 15 101325 60
... 24 of them, for each hour one
这个简单的程序会读它:
implicit none
integer hour, temp, hum
real p
character(80) junkline
open(unit=1, file='name_of_file.dat', status='old')
rewind(1)
read(1,*)junkline
do 10 i=1,24
read(1,*)hour,temp,p,hum
C do something here ...
10 end
close(1)
end
(缩进有点搞砸,但我不知道如何在这个奇怪的环境中正确设置它)
我的建议:阅读数据类型(INTEGER,REAL,CHARACTER),数组(DIMENSION),输入/输出(READ,WRITE,OPEN,CLOSE,REWIND)和循环(DO,FOR),以及''我马上就会做有用的东西。
我从未对随机数做任何事情,所以我无法帮助你,但我认为fortran中有一些内在的功能。我会检查出来,并明天报告。关于第3个问题,我不确定你的意思(你不知道你在文件中会有多少行数据?或者?)
答案 3 :(得分:0)
您需要检查编译器手册中的特定随机数生成器函数,但有可能生成0到1之间的随机数。这很容易处理 - 您只需将间隔缩放到适当的宽度,然后移动它以匹配正确的起点:即将r
中的[0, 1]
映射到s
中的[a, b]
,使用s = r*(b-a) + a
,其中r
是您从随机数生成器获得的值s
是您想要的范围内的随机值。
Idigas's answer很好地涵盖了你的第二个问题 - 使用格式化输入读取数据,然后像使用任何其他变量一样使用它们。
对于你的第三个问题,你需要定义文本文件中有多少行,只要你想对所有这些行做一些事情 - 如果你正在寻找读取行,处理它,然后继续,你可以在不知道提前行数的情况下完成。但是,如果您要将所有值存储在文件中(例如,具有温度,湿度和压力阵列,以便您可以计算蒸汽压力统计数据),则需要以某种方式设置存储。通常在FORTRAN 77中,这是通过预先分配大于您认为需要的大小的数组来完成的,但这很快就会成为问题。有没有机会切换到Fortran 90?更新版本具有更好的处理标准化动态内存分配的工具,更不用说许多其他优点。我会强烈推荐使用F90,如果可能的话 - 你会让你的生活更轻松。
根据您正在进行的处理类型,另一个选项是调查仅使用单次传递数据的算法,因此您不需要存储所有内容来计算诸如均值和标准偏差之类的内容,例如
答案 4 :(得分:0)
此子例程在fortran 77中生成一个介于0和ifin之间的随机数 我是种子一些很大的数字,例如746397923
subroutine rnd001(xi,i,ifin)
integer*4 i,ifin
real*8 xi
i=i*54891
xi=i*2.328306e-10+0.5D00
xi=xi*ifin
return
end
您可以进行修改,以适应特定范围。