[Tex/LaTex] pgfplots: Syntax of Piecewise Defined Functions


I read about piecewise defined functions today and saw this post which was actually about something else:

Label plots in pgfplots without entering coordinates manually

This is taken from there.


        axis y line=center,
        axis x line=middle, 
        axis on top=true,

] {(x<-2)*-2 + (!(x<-2) && (x<3))*x + (!(x<3)) * 3}
    node[pos=0.1,pin=135:{\color{purple}$f(x)=-2$}] {}
    node[pos=0.6,pin=135:{\color{blue}$f(x)=x$}] {}
    node[pos=0.9,pin=135:{\color{green!70!black}$f(x)=3$}] {}


enter image description here

I get the syntax and(<condition1>,<condition2>) which is explained here for example but I do not understand the syntax in the example above

(x<-2)*-2 + (!(x<-2) && (x<3))*x + (!(x<3)) * 3

Can somebody explain it to me or am I just being blind? There is no and like in and(a,b) and what does the ! do? I guess it's a negation.


Can I find this somewhere in a documentation or is this just common knowledge?

Best Answer

In pgfmath a true expression has the value 1, and a false expression has the value 0. That is, an expression such as (x<-2) is equivalent to a function f(x):

enter image description here

Hence, this works because:

  1. (x<-2): This condition is ONLY true for x < -2. Hence this only contributes to the expression for x < -2. Hence (x<-2)*-2=-2 for x<-2, 0 otherwise.

  2. (!(x<-2) && (x<3)): This has the value 1 for -2 <= x <= 2. Hence, in this range, this has the value of x.

  3. !(x<3): This is 1 only for x >=3. Hence (!(x<3)) * 3=3 for x >=3, and zero otherwise.

If there is still any confusion, this table that computes the values of the various conditions should help:

enter image description here