RuntimeError для генератора случайных чисел на основе специального PDF-файла с использованием метода rv_continous rvs (Python) - PullRequest
0 голосов
/ 18 июня 2020

У меня есть задача, для которой мне нужно сгенерировать случайные числа из пользовательского PDF-файла. Я видел, что rv_continous предлагает такие функции, и в принципе, как только мы определим PDF-файл, мы можем использовать метод rvs для генерации случайных чисел.

Вот код, который я написал для этой задачи:

from scipy.stats import rv_continuous
from scipy.special import gamma, gammaincc
import numpy as np
import matplotlib.pyplot as plt

def ref_exp(time, tau):
    return 1.0/tau *np.exp(-time/tau) #reference for the simple case tau = 1.0 , gam = 1.0

class custom_distr_gen(rv_continuous):
    def _pdf(self, x, gam, tau):
        return gammaincc(gam, (gam/tau)*x)/(gamma(gam)*tau)



psi = custom_distr_gen(name='first_run', a=0)
g = 1.0
ta = 1.0

random_numbers = psi.rvs(gam = g, tau = ta, size=1000)
plt.figure(1)
time = np.linspace(0, 10, 100)
plt.plot(time, ref_exp(time, ta))
plt.hist(random_numbers, bins = 25, density = True, alpha = 0.4)
plt.xlim(0, 10)

Я провел несколько тестов, и он работал, как ожидалось. Когда я устанавливаю g = 1.0 (параметр гаммы) и ta = 1.0 (параметр тау), получается отрицательное экспоненциальное распределение. Он хорошо работал и для других значений ta.

Но когда я пробую более высокие значения параметра g, у меня появляется RuntimeError (например, g = 3.0):

"RuntimeError: Failed to converge after 100 iterations."

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

...