TypeError:在分段使用sympy时无法确定关系的真值

2024-06-30 16:52:38 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的研究中,我在分段函数中找不到任何与关系值相关的例子。虽然我使用uni_dis方法收到了lowerupper值,但我仍在将这些值转换为分段函数的过程中陷入困境。原因是什么

from sympy import Symbol, Piecewise
import sympy as sym
import sympy.plotting as syp
import math

a = Symbol('a')
b = Symbol('b')
x = Symbol('x')
function = 1 / abs(a-b)

def uni_dis(lower, upper):
    if lower > upper:
        lower, upper = upper, lower
    uniform = Piecewise((0, x < lower), (0, x > upper), (function.subs({a:lower, b:upper}), x >= lower and x <= upper))
    syp.plot(uniform.subs((x,-10,10), title="uni_dis"))

uni_dis(231, 675)

我的错误消息如下:

TypeError                                 Traceback (most recent call last)
<ipython-input-3-c28135b22fc4> in <module>
----> 1 uni_dis(231, 675)

<ipython-input-2-e4a205990c2a> in uni_dis(lower, upper)
      2     if lower > upper:
      3         lower, upper = upper, lower
----> 4     uniform = Piecewise((0, x < lower), (0, x > upper), (function.subs({a:lower, b:upper}), x >= lower and x <= upper))
      5     syp.plot(uniform.subs((x,-10,10), title="uni_dis"))

C:\ProgramData\Anaconda3\lib\site-packages\sympy\core\relational.py in __nonzero__(self)
    374 
    375     def __nonzero__(self):
--> 376         raise TypeError("cannot determine truth value of Relational")
    377 
    378     __bool__ = __nonzero__

TypeError: cannot determine truth value of Relational

Tags: inimportfunctionuniformsymbolupperloweruni
2条回答

您应该将x >= lower and x <= upper修改为(x >= lower) & (x <= upper)。 问题在于,对symphy对象的逻辑求值可能会返回另一个无法推断为真或假的符号逻辑。 您可以看到(x >= lower).__class__如何返回另一个sympy不等式实例

更正逻辑表达式后,我得到一个“类型错误:'Symbol'对象不可下标”错误。在做了一些研究之后,我了解到plot方法可以与分段方法一起使用,如here。就这样

代码的更正版本:

def uniform_dist(lower, upper):
    if lower > upper:
        lower, upper = upper, lower
    syp.plot(Piecewise((0, x < lower), (0, x > upper), (f.subs({a:lower, b:upper}), (x >= lower) & (x <= upper))), (x,-10,10), title="uniform distribution")

相关问题 更多 >