Генерация случайного числа в заданном диапазоне в Фортране 77 - PullRequest
1 голос
/ 22 мая 2009

Я новичок, пытающийся провести несколько инженерных экспериментов с использованием Fortran 77. Я использую компилятор и редактор Force 2.0. У меня есть следующие запросы:

  1. Как я могу сгенерировать случайное число между указанным диапазоном, например, если мне нужно сгенерировать одно случайное число от 3,0 до 10,0, как я могу это сделать?
  2. Как я могу использовать данные из текстового файла для вызова в вычислениях в моей программе. Например, у меня есть значения температуры, давления и влажности (почасовые значения для дня, итого 24 значения в каждом текстовом файле).
  3. Нужно ли также указывать в программе, сколько значений содержится в текстовом файле?

Ответы [ 5 ]

3 голосов
/ 22 мая 2009

Кнут выпустил в общедоступные источники на C и FORTRAN для генератора псевдослучайных чисел, описанного в разделе 3.6 Искусство компьютерного программирования .

3 голосов
/ 22 мая 2009

Стандарт Fortran 77 не определяет генератор случайных чисел, но вы можете использовать любой из бесчисленных источников, свободно предоставляемых для этой цели; Например, http://www.cisl.ucar.edu/zine/96/spring/articles/3.random-6.html имеет хорошую, полезную подпрограмму f77 SRAND, готовую для копирования и вставки.

1 голос
/ 22 мая 2009

2-й вопрос:

Если ваш файл, например, выглядит так:

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), и вы ' Я буду делать полезные вещи в кратчайшие сроки.

Я никогда ничего не делал со случайными числами, поэтому я не могу вам помочь, но я думаю, что в Фортране есть некоторые внутренние функции для этого. Я проверю это и сообщу завтра. Что касается третьего вопроса, я не уверен, что вы имеете в виду (вы не знаете, сколько строк данных вы будете иметь в файле? Или?)

0 голосов
/ 07 апреля 2019

Эта подпрограмма генерирует случайное число в Фортране 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

Вы можете изменить, чтобы взять определенный диапазон.

0 голосов
/ 22 мая 2009

Вы захотите проверить руководство вашего компилятора для конкретной функции генератора случайных чисел, но есть вероятность, что она генерирует случайные числа в диапазоне от 0 до 1. Это легко сделать - вы просто масштабируете интервал до нужной ширины, а затем сдвиньте его так, чтобы он соответствовал правильной начальной точке: то есть, чтобы отобразить r в [0, 1] на s в [a, b], используйте s = r*(b-a) + a, где r - это значение, полученное из генератора случайных чисел, и s - случайное значение в требуемом диапазоне.

Ответ Идигаса хорошо описывает ваш второй вопрос - прочитайте данные с использованием форматированного ввода, а затем используйте их так же, как любую другую переменную.

Для вашего третьего вопроса вам нужно будет определить, сколько строк в текстовом файле, только если вы хотите что-то сделать со всеми из них - если вы смотрите на чтение строки, ее обработку, а затем переходите к , вы можете обойтись, не зная количество строк заранее. Однако, если вы хотите сохранить все значения в файле (например, иметь массивы температуры, влажности и давления, чтобы вы могли вычислить статистику давления пара), вам нужно как-то настроить хранилище. Обычно в FORTRAN 77 это делается путем предварительного выделения массива большего размера, чем вы думаете, но это может быстро стать проблематичным. Есть ли шанс перейти на Фортран 90? Обновленная версия имеет гораздо лучшие возможности для стандартизированного динамического выделения памяти, не говоря уже о многих других преимуществах. Я бы настоятельно рекомендовал бы использовать F90, если это вообще возможно - вы значительно упростите свою жизнь.

Другой вариант, в зависимости от типа обработки, которую вы выполняете, - это исследовать алгоритмы, которые используют только один проход данных, поэтому вам не нужно будет хранить все для вычисления таких вещей, как, например, средние значения и стандартные отклонения. .

...