|
Текст подпрограммы и версий 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