Генерация случайных чисел из пользовательской непрерывной функции плотности вероятности - PullRequest
0 голосов
/ 28 января 2020

в качестве заголовка говорится, что я пытаюсь сгенерировать случайные числа из пользовательской функции непрерывной плотности вероятности, которая:

0.001257 *x^4 * e^(-0.285714 *x)

, чтобы сделать это, я использую (на python 3) scipy.stats.rv_continuous и затем rvs() для их генерации

from decimal import Decimal
from scipy import stats

class my_distribution(stats.rv_continuous):
    def _pdf(self, x):
        return (Decimal(0.001257) *Decimal(x)**(4)*Decimal(np.exp(-0.285714 *x)))

distribution = my_distribution()
distribution.rvs()

обратите внимание, что я использовал Decimal, чтобы избавиться от OverflowError: (34, 'Result too large').

Тем не менее, я получаю ошибку RuntimeError: Failed to converge after 100 iterations.

Что там происходит? Как правильно добиться того, что мне нужно сделать?

1 Ответ

0 голосов
/ 28 января 2020

Альтернативой является выборка PDF, имеющегося у вас в дискретных точках (скажем, от 0 до 200), а затем выполнение кусочно-линейной интерполяции этих весов. (См. Также « Случайные числа из произвольного распределения ».)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...