|
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.su/lib_na/cat/g_htm_p/gsi1r_p.htm
Дата изменения: Fri Nov 13 13:09:47 2015 Дата индексирования: Sun Apr 10 01:04:23 2016 Кодировка: Windows-1251 |
|
Текст подпрограммы и версий gsi1r_p.zip |
Тексты тестовых примеров tgsi1r_p.zip |
Генерация одного псевдослучайного числа, имеющего биномиальное распределение.
Генерируется псевдослучайное число R такое, что
P{R=K} = CNK pK (1 - p) (N-K) , K = 0, 1, ..., N , 0 ≤ p ≤ 1 ,
где N и p - параметры биномиального распределения.
Если N < 15, то число R получается как сумма N независимых псевдослучайных чисел, принимающих значения 1 и 0 с вероятностями p и (1 - p) соответственно.
Для N ≥ 15 используется нормальная аппроксимация биномиального распределения.
A.D.Relles, A simple algorithm for generating binomial random variables when N is large, Journal of the American Statistical Association, 339(67), 1972, 612-613.
function GSI1R(ISEED :Integer; N :Integer; P :Real): Real;
Параметры
| ISEED - | целая переменная, значение которой перед обращением к подпрограмме может быть любым целым числом в пределах [1,2147483646]; по окончании работы ей присваивается новое значение, котоpое может быть использовано при последующем вхождении в подпрограмму; |
| N - | параметр биномиального распределения (N ≥ 0) (тип: целый); |
| P - | параметр биномиального распределения (0 ≤ P ≤ 1) (тип: вещественный). |
Версии : нет
Вызываемые подпрограммы
| GSU2R - | генерация одного псевдослучайного числа, pавномеpно распределенного в интервале (0, 1) ; |
| GSN2R - | генерация одного псевдослучайного числа, ноpмально распределенного с нулевым средним значением и единичной дисперсией; |
| SF35R - | вычисление значений дополнительной функции ошибок (дополнительного интеграла вероятностей). |
Замечания по использованию : нет
Unit TGSI1R_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, GSI1R_p;
function TGSI1R: String;
implementation
function TGSI1R: String;
var
ISEED,N,J,I :Integer;
P :Real;
X :Array [0..9] of Real;
label
_2,_1,_3,_4;
begin
Result := '';
ISEED := 123456;
N := 2;
Result := Result + Format('%s',[' GSI1R' + #$0D#$0A]) + #$0D#$0A;
Result := Result + Format('%s',[' N=2']) + #$0D#$0A;
for J:=1 to 3 do
begin
P := 0.01;
for I:=1 to 3 do
begin
X[I-1] := GSI1R(ISEED,N,P);
if ( P <= 0.01 )
then goto _2;
P := 0.7;
goto _1;
_2:
P := 0.1;
_1:
end;
Result := Result + Format('%s',[' P=0.01'+#$0D#$0A+
' P=0.1'+#$0D#$0A+
' P=0.7' + #$0D#$0A]) + #$0D#$0A;
Result := Result + #$0D#$0A;
for I:=1 to 3 do
begin
Result := Result + Format('%20.16f ',[X[I-1]]) + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
if ( N <= 2 )
then goto _3;
N := 30;
Result := Result + Format('%s',[' N=30']) + #$0D#$0A;
goto _4;
_3:
N := 10;
Result := Result + Format('%s',[' N=10']) + #$0D#$0A;
_4:
end;
UtRes('TGSI1R',Result); { вывод результатов в файл TGSI1R.res }
exit;
end;
end.
Результаты: R = 0.0