Нужно найти ошибку в коде или предоставить свой
Не сходятся числовые значения в коде по формуле
Результат должен быть как в табличке
Жду ваши предложения
import random
from math import comb
def generate_random_binary_sequence(length):
binary_sequence = ""
for _ in range(length):
bit = random.choice("01")
binary_sequence += bit
return binary_sequence
def combinations(n, k):
if n < k:
return 0 # Якщо n менше за k, то число комбінацій дорівнює 0.
else:
return comb(n, k)
def z(a, b):
if a >= b >= 1:
return combinations(a - 1, b - 1) # Якщо n менше за k, то число комбінацій дорівнює 0.
elif a == b == 0:
return 1
else:
return 0
# def calculate_formula(p, q, n, m_t, k_1, k_2, k_3, m_t_star):
# # Розрахунок суми ∑(m_1=0)^n(p^(m_1) * q^(m_0))
# summation_result = sum(p m_1 * q (n - m_1) for m_1 in range(n + 1))
#
# # Розрахунок інших компонентів формули (C та Z)
# component1 = comb(m_t - k_1, k_2) * comb(m_t - k_1, k_3) * comb(m_t_star - m_t + k_1, k_3) * z(k_1, k_2)
# component2 = comb(m_t - k_1 - 1, k_2) * comb(m_t - k_1 - 1, k_3) * comb(m_t_star - m_t + k_1 + 1, k_3) * comb(k_1, k_2)
#
# # Обчислення значення P за формулою
# result = summation_result * (component1 + component2)
#
# return result
# Дайте користувачеві ввести бажану довжину
try:
n = int(input("Введіть бажану довжину послідовності: "))
if n < 1:
print("Довжина повинна бути більше 0.")
else:
random_sequence = generate_random_binary_sequence(n)
# random_sequence="01101"
print("Згенерована випадкова двійкова послідовність:", random_sequence)
# Підрахунок кількості 1 та 0 у послідовності
m_t = random_sequence.count('0')
m_t_star = random_sequence.count('1')
print(f"Кількість '0' у послідовності: {m_t}")
print(f"Кількість '1' у послідовності: {m_t_star}")
k_1 = 6
k_2 = 3
k_3 = 1
result = 0
p = 0.5
q = 0.5
for i in range(n):
result = result + (pow(p, i) * pow(q, n - i) * (
(combinations(m_t - k_1, k_2) * combinations(m_t - k_1, k_3) * combinations(m_t_star - m_t + k_1,
k_3) * z(k_1,
k_2)) + (combinations(
m_t - k_1 - 1, k_2) * combinations(m_t - k_1 - 1, k_3) * combinations(m_t_star - m_t + k_1 + 1,
k_3) * combinations(k_1,
k_2))))
result = result / (pow(2, n))
print(f"Вірогідність: {result}")
except ValueError:
print("Будь ласка, введіть ціле число для довжини послідовності.")