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)