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

Подпрограмма:  GSE1R (модуль GSE1R_p)

Назначение

Генерация массива псевдослучайных чисел, имеющих экспоненциальное распределение со средним значением XM и дисперсией XM.

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

Экспоненциально распределенные псевдослучайные числа R (I) вычисляются по формуле

     R(I) = -XM*ln(U(I)) ,  XM≥0 ,

где XM - параметр экспоненциального распределения (среднее и дисперсия), U (I) - pавномеpно распределенные псевдослучайные числа, получаемые с помощью GSU1R.

Д.Кнут, Искусство программирования для ЭВМ, т. 2, "Мир", M., 1977, стp. 141-142.

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

procedure GSE1R(var ISEED :Integer; XM :Real; var N :Integer;
                var R :Array of Real);

Параметры

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

Версии:  нет

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

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

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

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

Unit TGSE1R_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, GSE1R_p;

function TGSE1R: String; 

implementation

function TGSE1R: String;
var
ISEED,N,_i :Integer;
ХМ :Real;
R :Array [0..2] of Real;
begin
Result := '';
ISEED := 408805506;
N := 3;
ХМ := 1.0;
GSE1R(ISEED,XM,N,R);
Result := Result + Format('%s',[' PEЗУЛЬTAT']);
Result := Result + #$0D#$0A;
for _i:=0 to 2 do
 begin
  Result := Result + Format('%20.16f',[R[_i]]);
  if ( ((_i+1) mod 1)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('TGSE1R',Result);  { вывод результатов в файл TGSE1R.res }
exit;
end;

end.

Результаты:
       R(1) = 0.770362531059
       R(2) = 3.21917896882
       R(3) = 2.57395311171