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

pgfplotstikz-pgf

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.

\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\thispagestyle{empty}

\begin{tikzpicture}
\begin{axis}[
axis y line=center,
axis x line=middle,
axis on top=true,
xmin=-7,
xmax=7,
ymin=-4,
ymax=4,
clip=false
]

mark=none,
domain=-4:6,
samples=80,
red,
thick,
] {(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$}] {}
;
\end{axis}
\end{tikzpicture}

\end{document}


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.

Update

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

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):

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: