Алгоритмы получения случайных чисел
Материал из DRKB
Нормальное распределение[править | править код]
{ **** UBPFD *********** by kladovka.net.ru ****
>> Нормальное распределение
Возвращает случайное число, распределенное по нормальному закону распределения
с заданным математическим ожиданием и дисперсией
Зависимости: System
Автор: Mystic, mystic2000@newmail.ru, ICQ:125905046, Харьков
Copyright: Из книги Полякова и Круглова "Turbo Pascal 5.5"
Дата: 25 апреля 2002 г.
********************************************** }
function Gauss(Mx, Sigma: Extended): Extended;
var
a, b, r, Sq: Extended;
begin
repeat
a := 2*Random - 1;
b := 2*Random - 1;
r := Sqr(a) + Srq(b);
until r < 1;
Sq := Sqrt(-2 * Ln(r) / r);
Result := Mx + Sigma * a * Sq;
end;
Пример использования:
X := Gauss(0, 1);
Author: Mystic
ID: 04136
В стандартном модуле Math есть функция
function RandG(Mean, StdDev: Extended): Extended;
Author: Vit
ID: 04137
Экспоненциальное распределение[править | править код]
{ **** UBPFD *********** by kladovka.net.ru ****
>> Экспоненциальное распределение
Возвращает случайное число, распределенное по экспоненциальному закону распределения
Зависимости: System
Автор: Алексей Перов, aperov@rambler.ru, ICQ:102661702, Караганда
Copyright: Лабораторные работы по курсу "Моделирование информационных систем", КарГТУ
Дата: 25 апреля 2002 г.
********************************************** }
{ экспоненциальное распределение }
function RandomExponent(ex: Extended): Extended;
begin
Result := - ex * Ln(Random)
end;
Пример использования:
x := RandomExponent(1);
Author: Алексей Перов
ID: 04138
Гамма распределение[править | править код]
{ **** UBPFD *********** by kladovka.net.ru ****
>> Гамма распределение
Возвращает случайное число, распределенное по закону Гамма-распределения
Зависимости: system
Автор: Алексей Перов, aperov@rambler.ru, ICQ:102661702, Караганда
Copyright: Лабораторные работы по курсу "Моделирование информационных систем", КарГТУ
Дата: 25 апреля 2002 г.
********************************************** }
{ гамма распределение }
function RandomGamma(k, a: Extended): Extended;
var
tr: Extended;
i: Integer;
begin
tr := 1;
for i := 1 to Round(k) do
tr := tr * Random;
Result := -ln(tr) / a;
end;
Пример использования:
x := RandomGamma(10, 5);
Author: Алексей Перов
ID: 04139
Распределение Паскаля[править | править код]
{ **** UBPFD *********** by kladovka.net.ru ****
>> Распределение Паскаля
Возвращает случайное число, распределенное по закону распределения Паскаля
Зависимости: system
Автор: Алексей Перов, aperov@rambler.ru, ICQ:102661702, Караганда
Copyright: Лабораторные работы по курсу "Моделирование информационных систем", КарГТУ
Дата: 26 апреля 2002 г.
********************************************** }
{ распределение Паскаля }
function RandomPascal(k, q: Extended): Extended;
var
tr: Extended;
i: Integer;
begin
tr := 1;
q := ln(q);
for i := 1 to Round(k) do
tr := tr * Random;
Result := ln(tr) / q;
end;
Пример использования:
x := RandomPascal(10, 5);
Author: Алексей Перов
ID: 04140
Биноминальное распределение[править | править код]
{ **** UBPFD *********** by kladovka.net.ru ****
>> Биноминальное раcпределение
Возвращает случайное число, распределенное по биноминальному закону
распределения
Зависимости: system
Автор: Алексей Перов, aperov@rambler.ru, ICQ:102661702, Караганда
Copyright: Лабораторные работы по курсу "Моделирование информационных систем", КарГТУ
Дата: 26 апреля 2002 г.
********************************************** }
function RandomBinom(n, p: Extended): Extended;
{ биноминальное распределение }
var
x: Extended;
i: Integer;
begin
x := 0;
for i := 1 to Round(n) do
if Random - p <= 0 then
x := x + 1;
Result := x;
end;
Пример использования:
x := RandomBinom(10, 0.4);
Author: Алексей Перов
ID: 04141
Гипергеометрическое распределение[править | править код]
{ **** UBPFD *********** by kladovka.net.ru ****
>> Гипергеометрическое распределение
Возвращает случайное число, распределенное по гипергеометрическому закону
распределения
Зависимости: system
Автор: Алексей Перов, aperov@rambler.ru, ICQ:102661702, Караганда
Copyright: Лабораторные работы по курсу "Моделирование информационных систем", КарГТУ
Дата: 26 апреля 2002 г.
********************************************** }
{ гипергеометрическое распределение }
function RandomGipgeo(tn, ns, p: Extended): Extended;
var
x, s: Extended;
i: Integer;
begin
x := 0;
for i := 1 to Round(ns) do
begin
if Random - p <= 0 then
begin
s := 1;
x := x + 1
end
else
s := 0;
p := (tn * p - s) / (tn - 1)
end;
Result := x
end;
Пример использования:
x := RandomGipgeo(2.5, 3, 0.4);
Author: Алексей Перов
ID: 04142