Способ подгонки PDF из гистограммы в Python - PullRequest
1 голос
/ 08 января 2020

- это образец (r) в виде массива numpy. Я создал гистограмму из этого образца:

plt.hist(x=r, bins='auto', color='#0504aa',alpha=0.7, rwidth=0.85)
objective_prob, bin_edges = np.histogram(r, bins='auto', density=True)
bin_centers = 0.5*(bin_edges[1:] + bin_edges[:-1])

Здесь я попытался получить значения возможного PDF, который должен быть определен как

def f(x, N):
    return N/k*T*np.exp(-N*x**2/2*k*T)

с х - это образец (в данном случае r), а N - параметр, который нужно установить. k и T постоянные. Это распределение Больцмана.

Первый вопрос: является ли мой массив «jective_prob »правильным в том смысле, что он правильно дает значения функции плотности вероятности (PDF)? Я спрашиваю, потому что я не уверен, правильно ли я понял аргумент «normed = True». Второй вопрос: правильно ли я использую массив bin_centers для своей оси x?

Далее (важный шаг). Я хочу выполнить подгонку (чтобы я получил параметр N из своей функции f)

params, params_covariance = curve_fit(f, bin_centers , objective_prob, p0=None)

Здесь я использую мой массив bin_centers в качестве x-data, а target_prob в качестве y-data. Теперь значение N полностью отключено, и если я попытаюсь построить его с помощью

plt.figure(figsize=(6, 4))
plt.plot(bin_centers, objective_prob, label="Histogram")
plt.plot(bin_centers, f(bin_centers, params[0]), 'r-')
plt.legend()
plt.show()

, я получу прямую линию для моей подгоночной кривой. Итак, третий вопрос: моя кривая не подходит? Где еще я могу ошибаться? Правильно ли использовать соответствующие массивы в моем Curve_fit или я неправильно использую бин-центры?

Любая помощь очень ценится! Спасибо.

...