Я не понимаю, почему следующий код работает с нормальной функцией и не для другой пользовательской функции:Как правильно пробовать плотность?
Вот пример, где я пытался образец нормального распределения:
n = 100000
xx = np.random.uniform(-5, 5, n)
rho = mpl.pylab.normpdf(xx, 0, 1)
rnd = np.random.rand(n)
ix = np.where(rho > rnd)
xx = xx[ix]
h = plt.hist(xx, bins=20, normed=True)
# plot density
x = np.linspace(-5, 5, 100)
plt.plot(x, mpl.pylab.normpdf(x, 0, 1))
Он работает и Я получил:
Теперь, если я изменил плотность, я не правильно пробовать его. Я проверил, хорошо ли нормируется плотность, и это так. Таким образом, я не понимаю, где я не прав
n = 100000
xx = np.random.uniform(0, 1, n)
rho = 2 * np.sin(2 * xx * np.pi)**2
rnd = np.random.rand(n)
ix = np.where(rho > rnd)
xx = xx[ix]
h = plt.hist(xx, bins=20, normed=True)
# plot density
x = np.linspace(0, 1, 100)
print(np.trapz(2 * np.sin(2 * x * np.pi)**2, x))
plt.plot(x, 2 * np.sin(2 * x * np.pi)**2)
Хороший улов на первом примере. Оба примера имели ошибки, но второй во втором был более заметным (и более значительным). –
@JohnColeman Да, это правильно –