为什么SymPy不将标准日志-普通PDF集成到1?
我在Python3.x和SymPy 1.0.1中运行以下代码:
from sympy.stats import density, LogNormal
from sympy import Symbol, integrate, oo
mu, sigma = 0, 1
z = Symbol('z')
X = LogNormal('x', mu, sigma)
f = density(X)(z)
integrate(f, (z, 0, oo))
哪一个应该(?)返回1但产出:
sqrt(2)*Integral(exp(-log(z)**2/2)/z, (z, 0, oo))/(2*sqrt(pi))
有人知道这是怎么回事吗?
发布于 2016-11-06 19:02:30
显然,Sympy没有找到这个积分的闭形式解。
但是,您可以帮助Sympy执行集成。一种方法是执行集成变量的转换,希望它将产生一个更简单的integrand表达式,由Sympy来处理。Sympy为此提供了一种方便的transform()
方法。
import sympy as sp
import sympy.stats
mu, sigma = 0, 1
z = sp.Symbol('z', nonnegative=True)
X = sympy.stats.LogNormal('x', mu, sigma)
f = sympy.stats.density(X)(z)
I = sp.Integral(f, (z, 0, sp.oo))
print(I)
这是Sympy无法计算的原始积分形式。(注意sympy.Integral
的用法,它返回一个未计算的积分。)一个(明显?)积分变量的转换是z -> exp(z)
,这将产生一个新的积分,如下所示
I2 = I.transform(z,sp.exp(z))
print(I2)
现在,我们可以调用doit()
方法来计算转换后的积分:
I2.doit()
1
https://stackoverflow.com/questions/40452918
复制相似问题