Добавил:
ysveta99
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:2
.pyfrom matplotlib import pyplot as plt
import numpy as np
import scipy.stats as st
def gamma_hist(k, lmb, n):
f_exp = lambda lmb: -(1 / lmb) * np.log(np.random.random())
f_gamma = lambda k, lmb: sum([f_exp(lmb) for _ in range(k)])
sample, steps, mu, d = [], [], [], []
res = [0, 1000]
x_min = x_max = delta = 0
while min(res) < n:
sample.append(f_gamma(k, lmb))
if len(sample) % 100 == 0:
mu.append(sum(sample) / len(sample))
d.append(np.var(sample))
if len(sample) < 1000:
continue
elif x_min <= sample[-1] <= x_max:
bar = int((sample[-1] - x_min) / delta)
res[((bar + 1) * (bar <= len(res) - 1)) - 1] += 1
if 1 - sum(res) / len(sample) < 0.01:
continue
x_min = min(sample)
x_max = max(sample)
delta = (x_max - x_min) / 10
steps = [i * delta for i in range(0, 11)]
res = [0] * 10 # Количество попавших в res[i] интервал элементов выборки
# Запронение интервалов гисторгаммы
for i in sample:
bar = int((i - x_min) / delta)
res[((bar + 1) * (bar <= len(res) - 1)) - 1] += 1
# Histogram
print(res)
plt.hist(sample, density=True, bins=12, label="Values")
mn, mx = plt.xlim()
plt.xlim(mn, mx)
kde_xs = np.linspace(mn, mx, 100000)
kde = st.gaussian_kde(sample)
plt.plot(kde_xs, kde.pdf(kde_xs))
plt.ylabel('Probability')
plt.show()
return steps, res, mu, d
def main():
k, lmb = 5, 3
step, hist, mu, d = gamma_hist(k, lmb, 100)
plt.plot([100 * i for i in range(len(mu))], mu)
plt.plot([100, len(mu) * 100], [k / lmb] * 2)
plt.show()
plt.plot([100 * i for i in range(len(d))], d)
plt.plot([100, len(d) * 100], [k / (lmb ** 2)] * 2)
plt.show()
if __name__ == "__main__":
main()
Соседние файлы в предмете Имитационное моделирование