Текст подпрограммы и версий ( Фортран )
gsg1r.zip  gsg2r.zip  gsg3r.zip
Тексты тестовых примеров ( Фортран )
tgsg1r.zip  tgsg2r.zip  tgsg3r.zip
Текст подпрограммы и версий ( Си )
gsg1r_c.zip  gsg2r_c.zip  gsg3r_c.zip
Тексты тестовых примеров ( Си )
tgsg1r_c.zip  tgsg2r_c.zip  tgsg3r_c.zip
Текст подпрограммы и версий ( Паскаль )
gsg1r_p.zip  gsg2r_p.zip  gsg3r_p.zip
Тексты тестовых примеров ( Паскаль )
tgsg1r_p.zip  tgsg2r_p.zip  tgsg3r_p.zip

Подпрограмма:  GSG1R (версии: GSG2R,GSG3R)

Назначение

Генерация массива псевдослучайных чисел, имеющих гамма - распределение.

Математическое описание

Получающиеся в результате работы подпрограммы псевдослучайные числа имеют плотность распределения

     f(x) = (Г(A)*BA)-1 * x(A-1) * exp(-x/B)
     x>0 ,  A>0 ,  B>0.  

Алгоритм основан на приближенном вычислении инвертированной функции гамма - распределения.

1. Johnk,M.D., Erzung von betaverteiler und gammaverteiler zufallzahlen, Metrica, 8 (2), 1964.
2.

Phillips, Don T., and Beightler, Charles S., Procedures for generating gamma variates with non - integer parameter sets, Journal of Statistical Computation and Simulation, 1, 1972, 197 - 208.

Использование

    SUBROUTINE  GSG1R (ISEED, A, B, N, R) 

Параметры

ISEED - целая переменная, значение которой перед обращением к подпрограмме может быть любым целым числом в пределах [1,2147483646]; по окончании работы ей присваивается новое значение, котоpое может быть использовано при последующем вхождении в подпрограмму;
A - заданный параметр гамма - распределения (тип: вещественный);
B - заданный параметр гамма - распределения (тип: вещественный);
N - заданное количество генерируемых псевдослучайных чисел (тип: целый);
R - вещественный массив длины N, содержащий вычисленные псевдослучайные числа.

Версии

GSG2R - генерация массива псевдослучайных чисел, имеющих гамма - распределение;
GSG3R - генерация массива псевдослучайных чисел, имеющих гамма - распределение;

Вызываемые подпрограммы

GSU1R - генерация массива псевдослучайных чисел, pавномеpно распределенных в интервале (0, 1);
GSB1R - генерация массива псевдослучайных чисел, имеющих бэта - распределение (используется только для версии GSG3R).

Замечания по использованию

  Подпрограмма GSG2R использует значения некоторых коэффициентов, которые вычисляет подпрограмма GSG1R (они передаются через общий блок COMMON /GSG1R1/ ).
  Поэтому подпрограммой GSG2R можно пользоваться только после обращения к подпрограмме GSG1R с теми же параметрами гамма - распределения A и B.
  Подпрограмма GSG2R работает быстрее чем GSG1R; поэтому при необходимости получить несколько массивов псевдослучайных чисел с одинаковыми A и B следует первый раз обратиться к GSG1R, а потом обращаться к GSG2R.
 

Поскольку параметры A и B задаются при обращении к GSG1R, то подпрограмма GSG2R имеет заголовок

 

SUBROUTINE GSG2R (ISEED, N, R) .

 

Подпрограмма GSG3R работает быстрее в тех случаях, когда для заданных A и B требуется получить лишь небольшое количество псевдослучайных чисел (не более трех - пяти).

 

Подпрограмма GSG3R имеет заголовок

 

SUBROUTINE GSG3R (ISEED, A, B, N, W, R) ,

  где W - вещественный массив длины не менее чем [A] + 1, используемый подпрограммой для хранения промежуточных pезультатов.

Пример использования

       DIMENSION R(5), W(2)
       ISEED = 123456
       A = 0.5
       B = 0.8
       N = 5
       CALL  GSG3R (ISEED, A, B, N, W, R)

Результаты:

       R(1) = 0.3292359
       R(2) = 0.01474222
       R(3) = 0.1836272
       R(4) = 0.06199761
       R(5) = 0.6892484