Reputation: 3764
In sympy, how do I declare a Piecewise
function with multiple limits for multiple variables in a sub-function?
Here is my context and attempt:
from sympy import Piecewise, Symbol, exp
from sympy.abc import z
x1 = Symbol('x1')
x2 = Symbol('x2')
f = 2*pow(z,2)*exp(-z*(x1 + x2 + 2))
p = Piecewise((f, z > 0 and x1 > 0 and x2 > 0), (0, True))
And the error I receive is:
TypeError Traceback (most recent call last)
<ipython-input-47-5e3db02fe3dc> in <module>()
----> 1 p = Piecewise((f, z > 0 and x1 > 0 and x2 > 0), (0, True))
C:\Anaconda3\lib\site-packages\sympy\core\relational.py in __nonzero__(self)
193
194 def __nonzero__(self):
--> 195 raise TypeError("cannot determine truth value of Relational")
196
197 __bool__ = __nonzero__
TypeError: cannot determine truth value of Relational
Upvotes: 6
Views: 1882
Reputation: 574
You can use &
as well:
from sympy import Piecewise, Symbol, exp
from sympy.abc import z
x1 = Symbol('x1')
x2 = Symbol('x2')
f = 2 * pow(z,2) * exp(-z * (x1 + x2 + 2))
p = Piecewise((f, (z > 0) & (x1 > 0) & (x2 > 0)), (0, True))
There are more examples in their documentation.
Upvotes: 2
Reputation: 3764
Ah, there is a sympy And
function for this:
from sympy import Piecewise, Symbol, exp, And
from sympy.abc import z
x1 = Symbol('x1')
x2 = Symbol('x2')
f = 2*pow(z,2)*exp(-z*(x1 + x2 + 2))
p = Piecewise((f, And(z > 0, x1 > 0, x2 > 0)), (0, True))
Upvotes: 5