gpt4 book ai didi

python - 假设正数时 Sympy 中可能存在不一致

转载 作者:太空宇宙 更新时间:2023-11-03 10:58:12 25 4
gpt4 key购买 nike

在 Python 2.7.11 上使用 Sympy 包版本 1.0 我发现(对我而言)不一致。这是我正在使用的代码:

import sympy as sy
from sympy.stats import Normal, density
from sympy.assumptions import assuming, Q, ask

sy.init_printing()

a = sy.symbols('a', real=True)
with assuming(Q.positive(a)):
print ask(Q.positive(a))
N = Normal('N', 0, a)

我得到的是

True

按预期从第一次打印开始,但在创建 Normal 对象时出现异常

ValueError: Standard deviation must be positive

任何人都可以解释一下它是否打算像这样以及为什么?谢谢!

PS:我知道我可以声明符号为正数

最佳答案

问题很简单:SymPy 中有两个假设系统,称为旧式假设和新式假设。他们还没有很好地互动。

旧式假设在符号上定义谓词,例如

x = Symbol("x", positive=True)

然后使用 .is_positive 等方法对泛型表达式执行推导

>>> x.is_positive
True

最新版本的SymPy已经将旧式假设与新式假设联系起来,所以你现在可以查询

>>> ask(Q.positive(x))
True

SymPy 的旧版本将返回 None,因为这两个假设系统根本没有关联。

问题是这种关系尚未互惠:旧式假设系统不知道用新式假设系统定义的假设。你可以自己验证一下:

>>> with assuming(Q.positive(y)):
... print y.is_positive
None

随机变量正态要求标准差参数为正,验证是用旧式假设完成的。因此你的案子失败了。

请注意,在下一个 SymPy 版本中,标准差的正性条件可能会放宽到非负性条件(即,允许接受正性不确定的情况)。

关于python - 假设正数时 Sympy 中可能存在不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37832160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com