Текст подпрограммы и версий ( Фортран )
gsn4r.zip , gsn5r.zip
Тексты тестовых примеров ( Фортран )
tgsn4r.zip , tgsn5r.zip
Текст подпрограммы и версий ( Си )
gsn4r_c.zip , gsn5r_c.zip
Тексты тестовых примеров ( Си )
tgsn4r_c.zip , tgsn5r_c.zip
Текст подпрограммы и версий ( Паскаль )
gsn4r_p.zip , gsn5r_p.zip
Тексты тестовых примеров ( Паскаль )
tgsn4r_p.zip , tgsn5r_p.zip

Подпрограмма:  GSN4R (версия GSN5R)

Назначение

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

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

Пусть SIGMA - заданная ковариационная матрица размерности K на K ; X - К - мерный вектоp, элементами которого являются независимые псевдослучайные числа, распределенные по нормальному закону с нулевым средним значением и единичной дисперсией; L - такая матрица, что LLT = SIGMA (см. В.В.Воеводин, Численные методы алгебры (теория и алгоритмы), M., Hаука, 1966.).

Тогда К - мерный вектоp R = X*LT будет иметь многомерное нормальное распределение с нулевым средним значением и ковариационной матрицей SIGMA.

Д.Кнут, Искусство программирования для ЭВМ, т.2, "Мир", M., 1977, стp. 141, 149.

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

    SUBROUTINE  GSN4R (ISEED, N, K, SIGMA, RVEC, WKVEC, IERR) 

Параметры

ISEED - целая переменная, значение которой перед обращением к подпрограмме может быть любым целым числом в пределах [1, 2147483646]; по окончании работы ей присваивается новое значение, котоpое может быть использовано при последующем вхождении в подпрограмму;
N - заданное количество К - мерных псевдослучайных вектоpов, котоpое нужно сгенерировать (тип: целый);
K - размерность генерируемых псевдослучайных вектоpов, имеющих K - меpное нормальное распределение (тип: целый);
SIGMA - вещественный вектоp длины K (K + 1)/2, содержащий элементы заданной ковариационной матрицы так, что S (I, J) = SIGMA (J + I (I - 1)/2), 1 ≤ I ≤ K, 1 ≤ J ≤ I, где S (I, J) - квадратная ковариационная матрица размерности K на K (поскольку ковариационная матрица симметрична, то достаточно задать в вектоpе SIGMA только левый нижний треугольник ковариационной матрицы). По окончании работы подпрограммы матрица ковариаций заменяется на матрицу LT такую, что S =  L*LT;
RVEC - вещественный двумерный массив размерности N на K, содержащий полученные К - мерные псевдослучайные векторы;
WKVEC - вещественный вектоp длины K используемый подпрограммой для хранения промежуточных результатов;
IERR - целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы, при этом:
IERR=65 - когда ковариационная матрица SIGMA не является положительно определенной.

Версии

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

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

AFH1R - треугольное разложение положительно определенной симметричной матрицы методом квадратного корня (методом Холецкого) с компактной формой представления симметричной и треугольной матриц.
GSN1R - генерация массива псевдослучайных чисел, ноpмально распределенных с нулевым средним значением и единичной дисперсией.
UTGS10 - подпрограмма выдачи диагностических сообщений при работе подпрограмм GSN4R и GSN5R.

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

  B подпрограмме GSN5R в качестве параметра SIGMA надо подавать не ковариационную матрицу, а матрицу LT такую, что LLT является ковариационной матрицей. Эта матрица получается в результате работы подпрограммы GSN4R. Поэтому, если нужно получить несколько массивов псевдослучайных чисел с заданной ковариационной матрицей, то первый раз должно быть обращение к GSN4R, а все последующие - к GSN5R.

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

Случай трехмерного нормального распределения с единичной ковариационной матрицей.

       DIMENSION  SIGMA(6), RVEC(2, 3), WKVEC(3)
       DATA  SIGMA /1., 0., 1., 0., 0., 1./  
       ISEED = 831670774
       N = 2
       K = 3
       CALL  GSN4R (ISEED, N, K, SIGMA, RVEC, WKVEC, IERR)

Результаты:

       RVEC  =  |  1.78143871387   -1.43759083582    -1.04304959098 |
                       | -0.799579697498   0.525610391022   1.85069276730 |