pgfplots: Cómo trazar una curva con valor infinito como un diagrama adicional

pgfplots: Cómo trazar una curva con valor infinito como un diagrama adicional

Quiero trazar
acos(7/x)+acos(-2/x)+acos(5/x)-pimás domain=-20:20.

Me pregunto si puedo trazar esto comounocurva(no como dos curvas con dominios diferentes).

Entonces elijo unbounded coords=jump(comoaquí)
\addplot[red, domain=-20:20] {f(x)}; % works not :(
pero me da el error! Missing number, treated as zero.

¿Hay alguna posibilidad?

ingrese la descripción de la imagen aquí

\documentclass[margin=5pt, tikz]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}[
trig format=rad, 
declare function={
a=7;    
b=-2;    
c=5;
f(\x)=acos(a/\x)+acos(b/\x)+acos(c/\x)-pi;
m=max(a,b,c);
},
]
\begin{axis}[
axis lines=middle, 
samples=222,
xmin=-20, 
unbounded coords=jump,
]
\addplot[blue, domain = m:20] {f(x)}; % works :)

%\addplot[red, domain=-20:20] {f(x)}; % works not :(
\end{axis}
\end{tikzpicture}
\end{document}

Respuesta1

acosno está definido si el valor absoluto de su argumento es mayor que 1. Puede definir una versión "regularizada" que produzca, por ejemplo, infsi el argumento no tiene sentido.

\documentclass[margin=5pt, tikz]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}[
trig format=rad, 
declare function={
a=7;    
b=-2;    
c=5;
Acos(\x)=(abs(\x)>1?inf:acos(max(-1,min(1,\x))));
f(\x)=Acos(a/\x)+Acos(b/\x)+Acos(c/\x)-pi;
m=max(a,b,c);
},
]
\begin{axis}[
axis lines=middle, 
samples=222,
xmin=-20, 
unbounded coords=jump,
]
%\addplot[blue, domain = m:20] {f(x)}; % works :)

\addplot[red, domain=-20:20] {f(x)}; % works :)
\end{axis}
\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

Respuesta2

Puedes utilizar un gráfico paramétrico. El problema es que f(-m)y f(m)NO son infinitos, por lo que la línea se interpola.

\documentclass[margin=5pt, tikz]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}[
trig format=rad, 
declare function={
a=7;    
b=-2;    
c=5;
f(\x)=acos(a/\x)+acos(b/\x)+acos(c/\x)-pi;
m=max(a,b,c);
g(\t)=ifthenelse(\t>0,\t+m,\t-m);
}]
\begin{axis}[
variable=t, domain=-20:20, no markers,
axis lines=middle, 
samples=222,% overkill
xmin=-20, 
xmax=20,
unbounded coords=jump
]
\addplot[blue,coordinate] ({g(t)},{f(g(t))});
\end{axis}
\end{tikzpicture}
\end{document}

información relacionada