Microsegment.ru
  • Главная страница
  • О проекте
  • Портфолио
  • Блог
Математика на Python

Гипергеометрическое распределение случайной величины

Гипергеометрическое распределение случайной величины
Математика на Python

Функции гипергеометрического распределения случайной величины, приведенные здесь, можно использовать с любым количеством множеств. Данные функции основаны на формуле Лапласа.

Первая функция позволяет рассчитать гипергеометрическую вероятность для одного события, а вторая для последовательности событий. В обоих функциях требуется соблюдать последовательность размещения множеств в списках (массивах). Во второй функции для чистоты результата требуется использовать одинаковое количество множеств элементов во всех событиях последовательности.

Решение на Python:

import math
from fractions import Fraction # Дроби

# Гипергеометрическое распределение случайной величины
# для одного события с любым количеством множеств элементов.

# ФУНКЦИИ
# Биноминальный коэффициент
def binomial_coefficient(n, k):
    a = math.factorial(n)
    b = math.factorial(k)
    c = math.factorial(n-k)
    return a/(b*c)

# Гиперметрическое распределение 
# случайной величины.
# Для решения нужно задать:
# M = количество элементов в множествах;
# m = количество элементов множеств в выборке.
# Порядок и количество множеств в M и m должны совпадать.
def hypermetric_distibution(M, m):
    if len(M) == len(m):
        ab = 1
        i = 0
        while i < len(M):
            if M[i] < m[i]: return 0
            ab *= binomial_coefficient(M[i], m[i])
            i += 1
        return ab/binomial_coefficient(sum(M), sum(m))
    return 0

# ВВОД ДАННЫХ
# Количество элементов в множествах
# (это элементы, участвующие в одном событии)
M = [4, 10, 15]
# Количество элементов множеств в выборке 
m = [1, 1, 3]

# РЕШЕНИЕ
P = hypermetric_distibution(M, m)

# ВЫВОД
print("P =", P, "=", Fraction(P).limit_denominator(100000))
P = 0.1532567049808429 = 40/261
# Гипергеометрическое распределение случайной величины
# для последовательности событий 
# с одинаковым количеством множеств элементов.

# ФУНКЦИИ
# M - Количество элементов в множествах ([события][элементы])
# k - Количество элементов множеств в выборке
def hypermetric_distibution_set(M, m):
    if len(M) == len(m) and len(M[0]) == len(m[0]):
        p = []
        pdot = 1
        i = 0
        while i < len(M):
            p.append(hypermetric_distibution(M[i], m[i]))
            pdot *= p[i]
            i += 1
        return [pdot, p]
    return 0

# ВВОД ДАННЫХ
# Количество элементов в множествах ([события][элементы])
M = [[2, 1], [1, 1]]
# Количество элементов множеств в выборке 
m = [[1, 0], [1, 0]]

# Пример. Вероятность того, что могут быть
# вытянуты последовательно все 4 туза из колоды
M = [[4, 32], [3, 32], [2, 32], [1, 32]]
m = [[1, 0], [1, 0], [1, 0], [1, 0]]

# РЕШЕНИЕ
P = hypermetric_distibution_set(M, m)

# ВЫВОД
print("P =", P[0], "=", Fraction(P[0]).limit_denominator(100000))
for i in P[1]:
    print(i, "=", Fraction(i).limit_denominator(100000))
P = 1.697648756472286e-05 = 1.697648756472286e-05 = 1/58905
0.1111111111111111 = 1/9
0.08571428571428572 = 3/35
0.058823529411764705 = 1/17
0.030303030303030304 = 1/33

Python анализ Математика Теория вероятностей

Предыдущая статьяВероятность наступления событияСледующая статья Сложение и умножение вероятностей

Рубрики

Метки

abc abcd excel Python sql VBA xyz Комбинаторика Математика Теория вероятностей анализ виртуальный помощник данные знания информационная система информация искусственный интеллект компетенции корпоративная информационная система маркетинг мудрость о проекте оптимизация практика программное обеспечение пэст ролевая модель теория юмор языки программирования

Политика конфиденциальности

Продолжая использовать данный сайт вы подтверждаете свое согласие с условиями его политики конфиденциальности. Подробнее…




Администрация и владельцы данного информационного ресурса не несут ответственности за возможные последствия, связанные с использованием информации, размещенной на нем.


Все права защищены. При копировании материалов сайта обязательно указывать ссылку на © Microsegment.ru (2020-2025)