从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')这个是可能的吗?
我要的是符号结果,而不是通过蒙特卡罗模拟计算的结果。
编辑:n是未知的,因此应该将它作为结果中的一个变量处理。
发布于 2020-03-19 01:19:28
自变量之和的pmf/pdf是每个变量的pmf/pdf的卷积。对于离散变量,卷积只是pmf元素的有限求和,对于骰子,它甚至更简单,因为元素都等于1/(面数)。最困难的部分是让求和的极限正确--这是值得注意的。
一旦你有了求和,你可以尝试一些身份。我不知道那里有什么可能,但你至少可以走那么远。
编辑:我读得不够仔细。如果你只对和的期望值感兴趣,那么它就简单多了。EX +Y= EX + EY,因此这个问题简化为计算一个模具的期望值。这也是一个求和,比卷积更简单。
尽管如此,如果再想一想,一张骰子的pmf的象征性解决方案可能会非常混乱。几年前,我计算出了一个一致连续变量之和的pdf --它是一个分段多项式,随着骰子数的增加而增加(我似乎记得,m是骰子的数量)。我怀疑类似的东西正在为骰子之和做准备。
发布于 2020-03-19 20:39:50
如果n是一个给定的常量,下面是一种求和n骰子的方法。正如其他地方所提到的,期望值非常简单:n是一个芯片的期望值(所以,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}https://stackoverflow.com/questions/60749471
复制相似问题