在Fortran 77中生成给定范围内的随机数

问题描述 投票:1回答:5

我是初学者,尝试使用fortran 77进行一些工程实验。我使用的是Force 2.0编译器和编辑器。我有以下问题:

  1. 如何在指定范围之间生成随机数,例如如果我需要生成3.0到10.0之间的单个随机数,我该怎么办呢?
  2. 如何在程序中的计算中使用文本文件中的数据。例如,我有温度,压力和湿度值(一天的每小时值,因此每个文本文件中总共24个值)。
  3. 我是否还需要在程序中定义文本文件中有多少值?
random fortran text-files fortran77
5个回答
3
投票

Fortran 77的标准没有指定随机数生成器,但您可以使用为此目的自由提供的任何无数源;例如,http://www.cisl.ucar.edu/zine/96/spring/articles/3.random-6.html有一个好的,可用的f77 SRAND子程序,可供您复制和粘贴。


3
投票

Knuth有released into the public domain sources in both C and FORTRAN用于“计算机编程艺术”第3.6节中描述的伪随机数生成器。


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个问题,我不确定你的意思(你不知道你将在文件中有多少行数据?或者?)


0
投票

您需要检查编译器手册中的特定随机数生成器函数,但有可能生成0到1之间的随机数。这很容易处理 - 您只需将间隔缩放为适当的宽度,然后将其移至匹配正确的起点:即将r中的[0, 1]映射到s中的[a, b],使用s = r*(b-a) + a,其中r是您从随机数生成器获得的值,s是您想要的范围内的随机值。

Idigas's answer很好地涵盖了你的第二个问题 - 使用格式化输入读取数据,然后像使用任何其他变量一样使用它们。

对于你的第三个问题,你需要定义文本文件中有多少行,只要你想对所有这些行做一些事情 - 如果你正在阅读这条线,处理它,然后继续,你可以在不知道提前行数的情况下过关。但是,如果您要将所有值存储在文件中(例如,具有温度,湿度和压力阵列,以便您可以计算蒸汽压力统计数据),则需要以某种方式设置存储。通常在FORTRAN 77中,这是通过预先分配大于您认为需要的大小的数组来完成的,但这很快就会成为问题。有没有机会切换到Fortran 90?更新版本具有更好的处理标准化动态内存分配的工具,更不用说许多其他优点。如果可能的话,我强烈建议使用F90 - 你会让你的生活更轻松。

另一种选择,取决于您正在进行的处理类型,将调查仅使用单次传递数据的算法,因此您不需要存储所有内容来计算诸如均值和标准偏差等内容。


0
投票

该子程序在fortran 77中生成0和if之间的随机数,其中i是种子;一些很棒的数字,如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

您可以修改以获取特定范围。

© www.soinside.com 2019 - 2024. All rights reserved.