Алгоритмы получения случайных чисел

== Нормальное распределение ==
{ **** 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
Category:Алгоритмы
Category:Математика