¿La forma más fácil de interpolar cada vez más estrechamente en un diagrama?

¿La forma más fácil de interpolar cada vez más estrechamente en un diagrama?

Estoy intentando crear un diagrama que se parece a este:

ingrese la descripción de la imagen aquí

Intenté ajustar una función con cada vez más nodos, pero no se ve bien (mostrando las 3 curvas en el diagrama para ilustrar mejor):

\documentclass[10pt,landscape,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[UKenglish]{babel}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture} [scale = 0.5]

\foreach \p in {-5,...,5} \node[circle,fill=green] at (\p,2*rand)  (\p) {};
\draw [cyan, xshift=4cm] plot [smooth, tension=1] coordinates { (-5) (-4) (-3) (-2) (-1) (0) (1) (2) (3) (4) (5) };
\draw [red, xshift=4cm] plot [smooth, tension=1] coordinates { (-5)  (-3)  (-1)  (1)  (3)  (5) };
\draw [blue, xshift=4cm] plot [smooth, tension=1] coordinates { (-5)  (5)  };
\end{tikzpicture}

\end{document}

ingrese la descripción de la imagen aquí

También intenté crear nodos como este (es decir, con una función definida x^2+x+1 + "ruido" en su lugar:

\foreach \p in {-5,...,5} \node[circle,fill=green] at (\p, \p * \p + \p + 1 + rand) (\p) {};

pero eso no funciona en absoluto.

En cualquier caso, mi código me obliga a enumerar los nodos manualmente, lo cual no es nada bueno.

¿Supongo que necesito una forma de interpolar con polinomios de grados cada vez más altos? Pero no estoy seguro de cómo hacer esto.

Respuesta1

Podría definir coordenadas de "interpolación" y conectarlas con un trazado fluido.

\documentclass[10pt,landscape,a4paper]{article}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture} [scale = 0.5]
\pgfmathtruncatemacro{\imin}{-5}
\pgfmathtruncatemacro{\imax}{5}
\foreach \p in {\imin,...,\imax} \node[circle,fill=green] at (\p,2*rand)  (p\p) {};
\foreach \X [evaluate=\X as \Xm using {int(\X-1)},evaluate=\X as \Xp using
{int(\X+1)}] in {\imin,...,\imax}
{\ifnum\X=\imin
  \path (p\X) coordinate (i\X);
 \else
  \ifnum\X=\imax
   \path (p\X) coordinate (i\X);
  \else
   \path (barycentric cs:p\X=0.6,p\Xm=0.2,p\Xp=0.2) coordinate (i\X);
  \fi 
 \fi
}
\draw [blue] plot [smooth, tension=1,variable=\X,samples at={\imin,...,\imax}] 
(i\X);
\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

Por supuesto, puedes cambiar el peso además de la tensión.

\documentclass[tikz,border=3.14mm]{standalone}
\begin{document}
\foreach \X in {1,1.5,...,10,9.5,9,...,1.5}
{\begin{tikzpicture}
\pgfmathtruncatemacro{\imin}{-5}
\pgfmathtruncatemacro{\imax}{5}
\pgfmathsetmacro{\mainweight}{\X}
\pgfmathsetseed{27}
\node[anchor=north west,font=\sffamily] at (\imin,-2)
{weight is \pgfmathprintnumber{\mainweight}};
\foreach \p in {\imin,...,\imax} \node[circle,fill=green] at (\p,2*rand)  (p\p) {};
\foreach \X [evaluate=\X as \Xm using {int(\X-1)},evaluate=\X as \Xp using
{int(\X+1)}] in {\imin,...,\imax}
{\ifnum\X=\imin
  \path (p\X) coordinate (i\X);
 \else
  \ifnum\X=\imax
   \path (p\X) coordinate (i\X);
  \else
   \path (barycentric cs:p\X=\mainweight,p\Xm=1,p\Xp=1) coordinate (i\X);
  \fi 
 \fi
}
\draw [blue] plot [smooth, tension=0.5,variable=\X,samples at={\imin,...,\imax}] 
(i\X);
\end{tikzpicture}}
\end{document}

ingrese la descripción de la imagen aquí

información relacionada