In my researches, I couldn't find any examples related to a relational value in piecewise functions. Although I received the lower and upper values with the uni_dis method, i'm stuck in the process of transferring these values to the piecewise function. What's the reason?
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)
My error message is as follows:
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
You should modify x >= lower and x <= upper
to (x >= lower) & (x <= upper)
.
The problem is that logical evaluations with SymPy objects can return an another symbolic logic that cannot be deduced to True or False.
You can see how (x >= lower).__class__
returns an another sympy inequality instance.