python - 将 sympy 中的变量定义为 CONSTANT

标签 python symbols sympy

from sympy import *
from sympy.stats import *
mu, Y = symbols('mu Y', real = True, constant = True)
sigma = symbols('sigma', real = True, positive=True)
X = Normal('X', mu, sigma)

询问时:
E(X, evaluate=False)

我得到:
∞                     
⌠                     
⎮                2    
⎮        -(X - μ)     
⎮        ──────────   
⎮              2      
⎮           2⋅σ       
⎮  √2⋅X⋅ℯ             
⎮  ──────────────── dX
⎮       2⋅√π⋅σ        
⌡                     
-∞ 

这是我所期望的。询问时:
E(X, X>0, evaluate=False)
E(X, X>pi, evaluate=False)
E(X, X >-3, evaluate=False)

使用任何常数,结果都符合条件期望的正常定义。但是,在尝试解决以下问题时:
E(X, X>Y)

我收到一个与根有关的错误。有没有办法定义 Y,这样 sympy 承认它是一个常数,就像 0 或 -3 甚至 pi 一样,并按预期显示积分?我假设我从 sympy 收到的请求的问题在于,不知何故 Y 未被确认为常量,因此,在尝试解决此请求时,sympy 面临着根本问题。

最佳答案

您的问题似乎是当前不等式求解器的一个限制:将不等式系统转换为集合并集的算法显然需要对由这些不等式确定的边界点进行排序(即使只有一个这样的点)。尚未实现通过象征性限制减少不平等。

我建议一个 肮脏的把戏 绕过这个限制。定义:

class SymbolTrick(NumberSymbol):
    def __new__(self, name):
        obj = NumberSymbol.__new__(self)
        obj._name = name
        return obj

    _as_mpf_val = pi._as_mpf_val
    approximation_interval = pi.approximation_interval
    __str__ = lambda self: str(self._name)

这定义了一个 NumberSymbol 的子类,它具有相同的 pi 数值(必须指定一个,因为不等式减少算法需要对列表边界进行排序,否则会失败)。

这一点:
In [7]: Y = SymbolTrick("Y")

In [8]: E(X, X > Y, evaluate=False)
Out[8]: 
∞                              
⌠                              
⎮                    2         
⎮            -(X - μ)          
⎮            ──────────        
⎮                  2           
⎮               2⋅σ            
⎮      √2⋅X⋅ℯ                  
⎮ ────────────────────────── dX
⎮        ∞                     
⎮        ⌠                     
⎮        ⎮             2       
⎮        ⎮     -(X - μ)        
⎮        ⎮     ──────────      
⎮        ⎮           2         
⎮        ⎮        2⋅σ          
⎮        ⎮ √2⋅ℯ                
⎮ 2⋅√π⋅σ⋅⎮ ────────────── dX   
⎮        ⎮     2⋅√π⋅σ          
⎮        ⌡                     
⎮        Y                     
⌡      
Y

关于python - 将 sympy 中的变量定义为 CONSTANT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39665207/

相关文章:

python - 如何使用 Python 格式化 ISO 中的日期?

搜索引擎优化和商标

lisp - 如何将字符串转换为符号以用作 Lisp "assoc"函数中的键?

replace - 千里马:如何用符号代替普通子表达式

python - 读取 LaTeX 表达式并用 python 将其漂亮地打印为 ASCII

python - 让 Tor ControlPort 工作

python - 向左折叠值,Python/Pandas

python - 使用 csvImporter 将 csv 导入 django 模型

python - scipy 的 cdist 与 Sympy 符号不兼容

python - Sympy:从表达式获取函数