Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Гипергеометрическое распределение

Delphi , Синтаксис , Математика



Автор: Алексей Перов
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> 
Возвращает случайное число, распределенное по гипергеометрическому закону
распределения

Зависимости: 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); 

Привет! Я переведу текст на русский язык:

Код, предоставленный ниже, это реализация функции генерации случайных чисел по гипергеометрической распределению в Delphi под именем RandomGipgeo. Функция generates случайные числа в соответствии с гипергеометрическим распределением, которое определяется тремя параметрами: tn (общее количество элементов), ns (количество выборок без замены) и p (вероятность успеха).

Вот разбивка кода:

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 // Проверяем, если случайное число, генерируемое между 0 и p, меньше или равно 0
    begin
      s := 1; // Если true, то устанавливаем временное значение в 1 (успех)
      x := x + 1; // Увеличиваем результат на 1
    end
    else
      s := 0; // Иначе, устанавливаем временное значение в 0 (неудача)
    p := (tn * p - s) / (tn - 1); // Обновляем вероятность для следующей итерации
  end;
  Result := x; // Возвращаем финальный результат
end;

Пример использования функции в конце кода демонстрирует, как использовать эту функцию:

x := RandomGipgeo(2.5, 3, 0.4);

В этом примере tn установлено в 2.5, ns установлено в 3 и p установлено в 0.4. Функция будет генерировать случайное число по гипергеометрическому распределению с этими параметрами.

Обратите внимание, что это реализация использует функцию Random для генерации случайных чисел в диапазоне [0, 1). Когда случайное число падает ниже p, оно считается успехом и добавляется к финальному результату. В противном случае, оно считается неудачей.

Алгоритм повторяется до обработки всех выборок без замены. При каждой итерации вероятность успеха обновляется на основе текущего состояния (т.е., количества успехов до сих пор).

Эта реализация предполагает, что tn является нецелым значением и использует функцию Round для округления его до целого для счетчика цикла. Это может привести к некоторой потере точности в генерируемых случайных числах, особенно если tn имеет большую десятичную часть.

В целом, этот код предоставляет реализацию Delphi функции генерации случайных чисел по гипергеометрическому распределению, которая может быть полезна в различных статистических и симуляционных приложениях.

В статье описывается функция RandomGipgeo, которая возвращает случайное число, распределенное по гипергеометрическому закону распределения, и предоставляется пример ее использования в программировании на языке Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Математика ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-15 22:08:31/0.0037100315093994/0