首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >积分对数-正规PDF的渐近性

积分对数-正规PDF的渐近性
EN

Stack Overflow用户
提问于 2016-11-06 18:25:00
回答 1查看 416关注 0票数 2

为什么SymPy不将标准日志-普通PDF集成到1?

我在Python3.x和SymPy 1.0.1中运行以下代码:

代码语言:javascript
运行
复制
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但产出:

代码语言:javascript
运行
复制
sqrt(2)*Integral(exp(-log(z)**2/2)/z, (z, 0, oo))/(2*sqrt(pi))

有人知道这是怎么回事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-06 19:02:30

显然,Sympy没有找到这个积分的闭形式解。

但是,您可以帮助Sympy执行集成。一种方法是执行集成变量的转换,希望它将产生一个更简单的integrand表达式,由Sympy来处理。Sympy为此提供了一种方便的transform()方法。

代码语言:javascript
运行
复制
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),这将产生一个新的积分,如下所示

代码语言:javascript
运行
复制
I2 = I.transform(z,sp.exp(z))
print(I2)

现在,我们可以调用doit()方法来计算转换后的积分:

代码语言:javascript
运行
复制
I2.doit()

1

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40452918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档