Текст подпрограммы и версий gsb1r_p.zip |
Тексты тестовых примеров tgsb1r_p.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 und gammaverteiler 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. |
procedure GSB1R(var ISEED :Integer; P :Real; Q :Real; N :Integer; var R :Array of Real);
Параметры
ISEED - | целая переменная, значение которой перед обращением к подпрограмме может быть любым целым числом в пределах [1,2147483646]; по окончании работы ей присваивается новое значение, котоpое может быть использовано при последующем вхождении в подпрограмму; |
P - | заданный параметр бета - распределения (тип: вещественный); |
Q - | заданный параметр бета - распределения (тип: вещественный); |
N - | заданное количество генерируемых псевдослучайных чисел (тип: целый); |
R - | вещественный массив длины N, содержащий вычисленные псевдослучайные числа. |
Версии: нет
Вызываемые подпрограммы
GSU1R - | генерация массива псевдослучайных чисел, pавномеpно распределенных в интервале (0,1); |
Замечания по использованию
Время работы подпрограммы pастет с pостом P и Q. |
Unit TGSB1R_p; interface uses SysUtils, Math, { Delphi } LStruct, Lfunc, UtRes_p, GSB1R_p; function TGSB1R: String; implementation function TGSB1R: String; var ISEED,N,I :Integer; Р,Q :Real; R :Array [0..2] of Real; begin Result := ''; P := 0.5; Q := 0.8; ISЕEE := 1432518450; N := 3; GSB1R(ISEED,P,Q,N,R); Result := Result + Format('%s',[' GSB1R' + #$0D#$0A]) + #$0D#$0A; Result := Result + Format('%s',[' ISEED=']); Result := Result + Format('',[ISEED]) + #$0D#$0A; Result := Result + #$0D#$0A; for I:=1 to N do begin Result := Result + Format('%20.16f ',[R[I-1]]) + #$0D#$0A; end; Result := Result + #$0D#$0A; UtRes('TGSB1R',Result); { вывод результатов в файл TGSB1R.res } exit; end; end. Результаты: R(1) = 0.364229459422 R(2) = 0.959182891531 R(3) = 0.132878061951