while (i < max_iter):
d11 = 0
d12 = 0
d2 = 0
# По формуле (9) обновляем аппроксимирующие значения y_1,...,y_N
for j in range(N - 1):
step = (N - 1) * i + j
print(f'\rОсновной цикл... {step}', end='')
m_j = integrate.quad(lambda x: x * getHistElement(x), b[j], b[j + 1])[0]
p_j = integrate.quad(lambda x: getHistElement(x), b[j], b[j + 1])[0]
p_j = p_j if p_j > 0 else 1
y[j] = m_j / p_j
# вычисление нового значения ошибки (по формуле 11)
d2 += m_j * m_j / p_j
d11 += keys[j] * keys[j] * p_j
d12 += keys[j] * p_j
d12 *= d12
sig = d11 - d12
D = sig - d2
if (D < eps):
break
# По формуле (10) находим новые границы квантов b_1,...,b_(N-1)
for j in range(N - 1):
b[j + 1] = (y[j + 1] + y[j]) / 2.
i += 1
Код на pastebin пж
https://pastebin.com/q47CyfmT
Обсуждают сегодня