Распределение степенного закона для данного показателя в C # с использованием MathNet - PullRequest
1 голос
/ 07 апреля 2010

В настоящее время я работаю над проектом, в котором мне нужно сгенерировать несколько значений (предпочтительно с плавающей или двойной точностью), которые следуют степенному закону распределения с заданным показателем степени!

Мне посоветовали использовать библиотеку MathNet.Iridium, чтобы помочь мне. У меня проблема в том, что документация не такая явная, какой должна быть, если она есть!

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

Кто-нибудь имеет больше опыта в этом вопросе и может дать мне несколько советов или советов?

1 Ответ

1 голос
/ 07 апреля 2010

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

Шаг за шагом это будет выглядеть так:

  1. Выберите функцию распределения, которая вам нравится.
  2. Рассчитать обратную интегральную функцию распределения, используя ручку и бумагу.
  3. Создание значения на основе равномерного распределения на единичном интервале. Random здесь будет хорошо.
  4. Введите значение в ICDF.

Результатом является случайное значение, выбранное с помощью выбранной вами функции распределения.

Если у вас возникнут проблемы с шагом 2, возможно, вам помогут https://mathoverflow.net/.

Редактировать: Если вам просто нужно какое-либо распределение степенных законов с экспоненциальной гаммой, это сгенерирует одно значение:

double r = 1.0 / Math.Pow(1-new Random().NextDouble(), 1.0/(gamma+1));
...