如何在没有“TypeError:无法确定真值”的情况下定义分段函数

时间:2016-04-26 16:38:51

标签: python sympy

我有以下代码:

l = 2
h = 1
p = 2
q = -2
x = Symbol('x')
f = Piecewise ( (0, x < 0),
               (p, 0 <= x <= l/3),
               (h/l * x - h, l/3 < x  < 2*l/3),
               (q, 2*l/3 <= x  <= l),
               (0, x > l)
)

导致错误:

TypeError: cannot determine truth value of Relational

定义此功能的正确方法是什么?我需要同情,因为我打算稍后整合它。

1 个答案:

答案 0 :(得分:3)

SymPy的分段课does not support chained inequalities,如And(0 < x, x < 1)。可以使用0 <= x代替,但在您的示例中,这是不必要的。回想一下,从左到右评估条件;第一个评估为True的人获胜。因此,您在第二个条件中不需要l/3 < x,或者在第三个条件中不需要f = Piecewise ( (0, x < 0), (p, x <= l/3), (h/l * x - h, x < 2*l/3), (q, x <= l), (0, True) ) 等。您的函数应该由

定义
visibility