Symboli c ожидание суммы N случайных величин - PullRequest
1 голос
/ 19 марта 2020

Из https://docs.sympy.org/latest/modules/stats.html#examples следующий код вычисляет ожидание суммы двух кубиков.

from sympy.stats import P, E, variance, Die, Normal
from sympy import Eq, simplify, symbols
X, Y = Die('X', 6), Die('Y', 6) # Define two six sided dice
E(X+Y) # Expectation of the sum of two dice

Однако я хочу вычислить ожидание суммы N кубиков, какой N является символом, например

N = symbols('N')

Возможно ли это?

Я хочу получить результат symboli c, а не один, рассчитанный с помощью симуляции Монте-Карло.

Редактировать: N неизвестно, поэтому его следует рассматривать как переменную в результате.

Ответы [ 2 ]

1 голос
/ 19 марта 2020

pmf / pdf суммы независимых переменных - это свертка pmf / pdf каждой переменной. Для дискретных переменных свертка - это просто конечное суммирование элементов pmf, а для игральных костей это даже проще, поскольку все элементы равны 1 / (число граней). Трудная часть состоит в том, чтобы получить правильные пределы суммирования - на что следует обратить внимание.

Как только у вас есть суммирование, вы можете попробовать некоторые тождества на нем. Я не уверен, что там возможно, но вы, конечно, можете получить, по крайней мере, так далеко.

РЕДАКТИРОВАТЬ: Я не читал достаточно внимательно. Если вас интересует только ожидаемое значение суммы, то это намного проще. E [X + Y] = E [X] + E [Y], поэтому вопрос сводится к вычислению ожидаемого значения для одного d ie. Это опять-таки суммирование и проще, чем свертка.

Как бы то ни было, если подумать об этом, символическое c решение для pmf суммы костей, вероятно, будет довольно грязным. Несколько лет go я разработал pdf суммы однородных непрерывных переменных - она ​​оказывается кусочно-полиномиальной, с числом кусочков, растущим с количеством игральных костей (мне кажется, это m, где m количество кубиков). Я подозреваю, что что-то похожее хранится на сумму кубика.

0 голосов
/ 19 марта 2020

Вот способ суммирования n кости в случае n - заданная константа. Как упоминалось в другом месте, ожидаемое значение довольно просто: n умноженное на ожидаемое значение одного d ie (т. Е. 7*n/2).

Расчет density (функция вероятности массы) быстро становится грязный и очень медленный Для n=10 это вызывает переполнение памяти в моей системе.

from sympy.stats import Die, P, E, variance, density

def sympy_listsum(die_list):
    res =  die_list[0]
    for d in die_list[1:]:
        res += d
    return res

n = 5
X = sympy_listsum([ Die(f'Die_{k}', 6) for k in range(n)] )

print(X)
print(E(X))
print(P(X < 10))
print(variance(X))
print(density(X))

Результат для n=5:

Die_0 + Die_1 + Die_2 + Die_3 + Die_4
35/2
7/432
175/12
{5: 1/7776, 6: 5/7776, 7: 5/2592, 8: 35/7776, 9: 35/3888, 10: 7/432, 11: 205/7776, 12: 305/7776, 13: 35/648, 14: 5/72, 15: 217/2592, 16: 245/2592, 17: 65/648, 18: 65/648, 19: 245/2592, 20: 217/2592, 21: 5/72, 22: 35/648, 23: 305/7776, 24: 205/7776, 25: 7/432, 26: 35/3888, 27: 35/7776, 28: 5/2592, 29: 5/7776, 30: 1/7776}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...