Sympy Sum() 的问题

凯鲁斯

我试图推导出离散分布的 CDF,其 PMF 由下式给出:

P(d)=log_10(1+1/d) for d=1,...,9

这是我派生 CDF 的代码:

import sympy

#Find the CDF
d=sympy.Symbol('d')
pmf=sympy.log((1+1/d),10)
CDF=sympy.Sum(pmf,(d,1,d))
print(CDF)
#compute the CDF
CDF=CDF.doit()
print(CDF)
#simplify the expression
CDF=CDF.simplify()
print(CDF)

这不会评估——它只是打印出总和:

Sum(log(1 + 1/d)/log(10), (d, 1, d))
Sum(log(1 + 1/d)/log(10), (d, 1, d))
Sum(log(1 + 1/d), (d, 1, d))/log(10)

我做错了什么?

奥斯卡·本杰明

你没有做错任何事。这应该有效:

In [83]: d = Symbol('d')                                                                                                                       

In [84]: CDF = Sum(log(1 + 1/d)/log(10), (d, 1, d))                                                                                            

In [85]: CDF                                                                                                                                   
Out[85]: 
  d             
_____           
  ╲      ⎛    1⎞
   ╲  log⎜1 + ─⎟
   ╱     ⎝    d⎠
  ╱   ──────────
 ╱     log(10)  
‾‾‾‾‾           
d = 1           

In [86]: CDF.doit()                                                                                                                            
Out[86]: 
  d             
_____           
  ╲      ⎛    1⎞
   ╲  log⎜1 + ─⎟
   ╱     ⎝    d⎠
  ╱   ──────────
 ╱     log(10)  
‾‾‾‾‾           
d = 1 

不是因为Sum不知道如何评估这个特定的总和。您可以用 代替d来获得没有符号限制的总和的结果:

In [88]: CDF.subs(d, 5).doit()                                                                                                                 
Out[88]: 
log(6/5) + log(5/4) + log(4/3) + log(3/2) + log(2)
──────────────────────────────────────────────────
                     log(10)

为了获得符号结果,我们可以将 the 转换Sum为 aProduct并获得doit有效的结果。应该可以这样做,CDF.rewrite(Product)但没有实现,所以这里有一种将Suma转换为 a Product(使用exp.expand)来评估结果的迂回方式

In [95]: log(exp(CDF).expand().doit()).simplify()                                                                                              
Out[95]: 
log(d + 1)
──────────
 log(10)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章