Текст подпрограммы и версий
gsb1r_c.zip
Тексты тестовых примеров
tgsb1r_c.zip

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

Назначение

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

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

Генерируются псевдослучайные числа, с плотностью распределения

     f(x) = x(P-1)*(1-x)(Q-1)*(Г(P+Q)/Г(P)*(Q)) ,  0≤x≤1 ,   P>0,  Q>0.

Здесь:
P и Q - параметры бета-распределения,
Г - гамма функция.

1.

Johnk,M.D., "Erzung von betaverteiler_c und gammaverteiler_c zufallzahlen", Metrica, 8(2), 1964.

2.

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

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

    int gsb1r_c (integer *iseed, real *p, real *q, integer *n,
            real *r__)

Параметры

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

Версии:  нет

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

gsu1r_c - генерация массива псевдослучайных чисел, pавномеpно распределенных в интервале (0,1);

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

  Время работы подпрограммы pастет с pостом p и q.

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

int main(void)
{
    /* Local variables */
    extern int gsb1r_c(int *, float *, float *, int *, float *);
    static int n;
    static float p, q, r__[3];
    static int iseed;

    p = .5f;
    q = .8f;
    iseed = 1432518450;
    n = 3;
    gsb1r_c(&iseed, &p, &q, &n, r__);

    printf("\n  %10i \n",iseed);
    printf("\n  %16.7e %16.7e %16.7e \n",r__[0],r__[1],r__[2]);
    return 0;
} /* main */


Результаты:
       r(1) = 0.364229459422
       r(2) = 0.959182891531
       r(3) = 0.132878061951