Текст подпрограммы и версий ( Фортран )
gsr2r.zip
Тексты тестовых примеров ( Фортран )
tgsr2r.zip
Текст подпрограммы и версий ( Си )
gsr2r_c.zip
Тексты тестовых примеров ( Си )
tgsr2r_c.zip
Текст подпрограммы и версий ( Паскаль )
gsr2r_p.zip
Тексты тестовых примеров ( Паскаль )
tgsr2r_p.zip

Подпрограмма:  GSR2R

Назначение

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

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

По таблично заданной желаемой функции распределения F (x) строится интерполяционный многочлен  p (x) для функции F - 1 (x) - обратной по отношению к F (x).

Псевдослучайные величины с функцией распределения F (x) получаются по формуле R = p (u), где u - псевдослучайная величина, pавномеpно распределенная в интервале (0, 1).

Akima H., "A new method of interpolation and smooth curve fitting based on local procedures", JACM, 17(4), 1970, 589 - 602.

Guerra V.M., Tapia R.A., and Thomson J.R., "A random number generator for continuous random variables", ICSA Technical Report, Rice Univercity, Houston, Texas.

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

    SUBROUTINE  GSR2R (ISEED, N, R, T, NX, IP, IERR) 

Параметры

ISEED - целая переменная, значение которой перед обращением к подпрограмме должно быть в пределах [1, 2147483646]; по окончании работы подпрограммы ей присваивается новое значение, котоpое может быть использовано при повторном вхождении в подпрограмму;
N - заданное количество псевдослучайных чисел, которые необходимо сгенерировать (тип: целый);
R - вещественный вектоp длины N содержащий полученные псевдослучайные величины;
T - двумерный вещественный массив размерностью NX * 5, содержащий табличные значения функции распределения F: элементы T (1, 1), T (2, 1), ..., T (NX, 1) содержат абсциссы, элементы T (1, 2), ..., T (NX,2) - ординаты (т.е. F (T (I, 1)) = T (I, 2)). Должны выполняться следующие условия: T (I, 1) < T (I + 1, 1), T (I, 2) < T (I + 1, 2) для I = 1, 2, ...,NX - 1; T (1, 2) = 0.; T (NX, 2) = 1.; остальные элементы массива используются для хранения промежуточных результатов;
NX - заданное количество узлов сетки, на которой задана функция распределения, NX ≥ 4 (тип: целый);
IP - задает режим работы подпрограмы (тип: целый); при этом если:
IP= 0 - то считается, что происходит первое обращение к подпрограмме и вычисляются коэффициенты интерполяционных полиномов;
IP= 1 - то коэффициенты интерполяционных полиномов считаются уже вычисленными;
  по окончании работы подпрограммы параметру IP присваивается значение единица;
IERR - целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом:
IERR=65 - когда заданное количество узлов сетки, на которой задана функция распределения, меньше четырех;
IERR=66 - когда либо абсциссы, либо ординаты табличных значений функции распределения не являются строго монотонно возрастающими;
IERR=67 - когда T (1, 2) > 0, либо T (NX, 2) < 1.

Версии: нет

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

GSU1R - генерация массива псевдослучайных чисел, pавномеpно распределенных в интервале (0, 1).
I IS9R - интерполяция кубическим квази - эрмитовым сплайном табличной функции от одной переменной на неравномерной сетке.
UTGS10 - подпрограмма выдачи диагностических сообщений при работе подпрограммы GSR2R.
UTI I10 - подпрограмма выдачи диагностических сообщений при работе подпрограммы I IS9R.

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

  Если после обращения к GSR2R с одной функцией распределения необходимо обратиться к GSR2R с другой функцией распределения, то необходимо установить параметр IP = 0.

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

       DIMENSION  T(6, 5), R(3)
       DATA  T(1, 1) /0., 0.6, 2.0, 4.2, 7.2, 11.0/
       DATA  T(1, 2) /0., 0.2, 0.4, 0.6, 0.8, 1.0/
       NX = 6
       N = 3
       IP = 0
       ISEED = 12457
       CALL  GSR2R (ISEED, N, R, T, NX, IP, IERR)

Результаты:

       IP    =  1
       R     =  ( 0.192542,  3.772356,  3.887485 )
       IERR  =  0