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
]
\addplot[
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?
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):Hence, this works because:
(x<-2)
: This condition is ONLY true forx < -2
. Hence this only contributes to the expression forx < -2
. Hence(x<-2)*-2=-2
forx<-2
, 0 otherwise.(!(x<-2) && (x<3))
: This has the value 1 for-2 <= x <= 2
. Hence, in this range, this has the value ofx
.!(x<3)
: This is 1 only forx >=3
. Hence(!(x<3)) * 3=3
forx >=3
, and zero otherwise.If there is still any confusion, this table that computes the values of the various conditions should help: