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

Подпрограмма:  GSB1R (модуль GSB1R_p)

Назначение

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

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

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

     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