Einfachste Möglichkeit, in einem Diagramm zunehmend enger zu interpolieren?

Einfachste Möglichkeit, in einem Diagramm zunehmend enger zu interpolieren?

Ich versuche, ein Diagramm zu erstellen, das so aussieht:

Bildbeschreibung hier eingeben

Ich habe versucht, eine Funktion mit zunehmend vielen Knoten anzupassen, aber es sieht nicht richtig aus (zur besseren Veranschaulichung werden im Diagramm alle drei Kurven angezeigt):

\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}

Bildbeschreibung hier eingeben

Ich habe auch versucht, Knoten wie diesen zu erstellen (also stattdessen mit einer definierten Funktion x^2+x+1 + „Rauschen“):

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

aber das funktioniert überhaupt nicht.

In jedem Fall zwingt mich mein Code dazu, Knoten manuell aufzulisten, was nicht so toll ist.

Ich schätze, ich brauche eine Möglichkeit zur Interpolation mit Polynomen zunehmend höheren Grades? Aber ich bin nicht sicher, wie das geht.

Antwort1

Man könnte „interpolierende“ Koordinaten definieren und diese mit einem glatten Plot verbinden.

\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}

Bildbeschreibung hier eingeben

Natürlich könntest Du neben der Spannung auch die Gewichtung verändern.

\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}

Bildbeschreibung hier eingeben

verwandte Informationen