Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.ru/lib_na/cat/g_htm_c/gsb1r_c.htm
Дата изменения: Tue Oct 28 17:48:32 2014 Дата индексирования: Sun Apr 10 01:32:40 2016 Кодировка: Windows-1251 |
Текст подпрограммы и версий gsb1r_c.zip |
Тексты тестовых примеров tgsb1r_c.zip |
Генерация массива псевдослучайных чисел, имеющих бета-распределение.
Генерируются псевдослучайные числа, с плотностью распределения
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