Trazar una función de relieve

Trazar una función de relieve

Me gustaría trazar una función de relieve de forma similar a como se hace en el libro de Loring W. Tu 'Una introducción a las variedades' (página 129, fig. 13.4), sin embargo, nunca funciona como quiero. Aquí está mi MWE:

\documentclass[border=10pt]{standalone} 

\usepackage{pgfplots}
\usepackage{tikz}
\pgfplotsset{%
every x tick/.style={black, thick},
every y tick/.style={black, thick},
every tick label/.append style = {font=\footnotesize},
every axis label/.append style = {font=\footnotesize},
compat=1.12
  }
\begin{document}
\begin{tikzpicture}
\begin{axis}[xmin=-1.2, xmax=2, ymin=-0.7, ymax=1.2,

 xtick = {-1,0,1}, ytick = { 1},
 scale=0.4, restrict y to domain=-1.5:1.2,
 axis x line=center, axis y line= center,
 samples=40]


 \addplot[black, samples=100, smooth, domain=-1.2:0, thick]
   plot (\x, { 0 });

 \addplot[black, samples=100, smooth, domain=0:1, thick, label={x}]
   plot (\x, { exp( -1/\x)/(exp (-1/\x)+exp(1/(\x-1))) });


 \addplot[black, thick, samples=100, smooth, domain=1:2]
   plot (\x, {1} );

 \end{axis}
 \end{tikzpicture}

  \end{document}

Mi principal problema con este resultado es que la "meseta" ya se alcanzó antes de x=1, lo que realmente no parece correcto. Cambiar el tamaño de la muestra a más de 100 producirá inmediatamente errores de dimensión. ¿Algun consejo?

Respuesta1

¡Bienvenido a TeX.SE! No tengo ese libro pero la gente suele usarlo tanhpara eso.

\documentclass[border=10pt]{standalone} 

\usepackage{pgfplots}
\usepackage{tikz}
\pgfplotsset{%
every x tick/.style={black, thick},
every y tick/.style={black, thick},
every tick label/.append style = {font=\footnotesize},
every axis label/.append style = {font=\footnotesize},
compat=1.12
  }
\begin{document}
\begin{tikzpicture}
\begin{axis}[xmin=-1.2, xmax=2, ymin=-0.7, ymax=1.2,
 xtick = {-1,0,1}, ytick = { 1},
 scale=0.4, restrict y to domain=-1.5:1.2,
 axis x line=center, axis y line= center,
 samples=40]


 \addplot[black, samples=100, smooth, domain=-1.2:2, thick]
   plot (\x, {0.5*(1+tanh(5*(\x-0.5)))});
\end{axis}
\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

Por supuesto, puedes variar el ancho del paso jugando con el prefactor, que está 5 arriba.

\documentclass[border=10pt,tikz]{standalone} 
\usepackage{pgfplots}
\pgfplotsset{%
every x tick/.style={black, thick},
every y tick/.style={black, thick},
every tick label/.append style = {font=\footnotesize},
every axis label/.append style = {font=\footnotesize},
compat=1.12
  }
\begin{document}
\foreach \X in {2,2.2,...,6,5.8,5.6,...,2.2}
{\begin{tikzpicture}
\begin{axis}[xmin=-1.2, xmax=2, ymin=-0.7, ymax=1.2,
 xtick = {-1,0,1}, ytick = { 1},
 scale=0.4, restrict y to domain=-1.5:1.2,
 axis x line=center, axis y line= center,
 samples=40,
 title={$f(x)=\left[1+\tanh\bigl(
 \pgfmathprintnumber[precision=1,fixed,zerofill]{\X}(x-1/2)\bigr)\right]/2$}]

 \addplot[black, samples=100, smooth, domain=-1.2:2, thick]
   plot (\x, {0.5*(1+tanh(\X*(\x-0.5)))});
\end{axis}
\end{tikzpicture}}
\end{document}

ingrese la descripción de la imagen aquí

Respuesta2

Las tramas en las respuestas propuestas no se parecen a lo que entiendo que es unbultofunción; más bien, las gráficas de las derivadas de las funciones indicadas serían funciones de relieve. Lo siguiente produce directamente un gráfico de función de relieve, con soporte para el intervalo $[-1,1]$:

\documentclass[border=10pt]{standalone} 

\usepackage{pgfplots}
\usepackage{tikz}
\pgfplotsset{%
  every x tick/.style={black, thin},
  every y tick/.style={black, thick},
  every tick label/.append style = {font=\footnotesize},
  every axis label/.append style = {font=\footnotesize},
  compat=1.12
 }
\begin{document}
\begin{tikzpicture}
\begin{axis}[xmin=-1.2, xmax=1.2, ymin=-0.2, ymax=1.2,
  xtick = {-1,0,1}, ytick = { 1},
  scale=0.4, restrict y to domain=-0.2:1.2,
  axis x line=center, axis y line= center,
  samples=40]
\addplot[black, samples=100, smooth, domain=-1.2:-1, thick]
   plot (\x, { 0 });
\addplot[black, samples=100, smooth, domain=-1:1, thick, label={x}]
   plot (\x, {exp(1-1/(1-x^2)});
\addplot[black, thick, samples=100, smooth, domain=1:1.2]
   plot (\x, {0} );
\end{axis}
\end{tikzpicture}

\end{document}

Función de golpe

(No estoy seguro de cómo evitar la aparente brecha en el gráfico inmediatamente a la derecha de $x=-1$.)

información relacionada