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

Материал из 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