
Ich möchte eine Zahlengerade in [0,1] zeichnen, sodass die Knoten an den durch die Bayes-Regel (oder eine bestimmte Funktion) definierten Zahlen platziert werden. Für einen Anfangswert von x' (von mir angegeben) möchte ich also, dass das Programm Knoten an jedem nachfolgenden Knoten x platziert, wobei x = x'/((1+x')*0,5) und so weiter bis zu einem maximalen x von 1. Hier ist ein MWE, das ich aus einem anderen ähnlichen Beitrag entwickelt habe:
\begin{tikzpicture}
\begin{axis}[
axis x line=middle,
axis y line=none,
width=\textwidth,
xmin=0,xmax=1,
xtick={0,1},
xticklabels={$0$,$1$},
xlabel=$\beta$
]
\addplot[samples at={1,...,100},only marks,mark size=0.5,blue] (x/((1+x)*0.5),0);
\end{axis}
\end{tikzpicture}
Jetzt möchte ich, dass es nicht mit Samples ausgeführt wird, sondern mit einem Anfangswert (den ich angeben kann) und sich dann zu anderen Zahlen hocharbeitet, bis x 1 erreicht.
Außerdem möchte ich diese Knoten identifizieren, sodass ich zwischen diesen Zahlen gebogene Pfeile zeichnen kann, um Sprünge anzuzeigen.
Ich habe mehrere Ansätze ausprobiert, aber es gelingt mir nicht, TikZ dazu zu bringen, bestimmte Zahlen einer solchen Sequenz nach einer Formel mit einem Anfangswert darzustellen. Ich kann natürlich alles problemlos einzeln lösen und dann darstellen, aber ich möchte diese hässliche Brute-Force-Methode nicht verwenden.
Für jede Hilfe bin ich dankbar. Vielen Dank im Voraus :)
Antwort1
Ich denke, das ist ungefähr das, was Sie wollen. Der Anfangswert wird mit der \setlength
Anweisung in Punkten festgelegt. Ich habe in der While-Schleife 0,99 pt verwendet, da der Wert nie 1 erreicht.
Der Code enthält zahlreiche Kommentare. Fragen Sie, wenn etwas unklar ist, oder lassen Sie mich wissen, wenn ich etwas falsch verstanden habe.
\documentclass{article}
\usepackage{tikz}
\usepackage{ifthen} % for whiledo
% set initial value
\newlength\MyX
\setlength\MyX{0.1pt}
% counter for giving a different name to each node
\newcounter{XCnt}
\setcounter{XCnt}{1}
% for convenience
\newcommand\XScale{200}
\newcommand\XMax{1}
\begin{document}
Diagram using the values set up in preamble:
\begin{center}
\begin{tikzpicture}
\draw[gray, very thin,|-stealth] (0,0) node[below] {$0$} -- (\XMax*\XScale pt,0) node[below] {$\XMax$};
% basic while loop
\whiledo{\lengthtest{\MyX<0.99pt}}{%
%draw filled node at x-position given by the \MyX length
\node [inner sep=0pt,minimum size=2pt,fill,circle] (n-\theXCnt) at (\MyX*\XScale,0) {};
% calculate new length
\pgfmathsetlengthmacro{\MyX}{\MyX/((1+\MyX)*0.5)}
% add 1 to the naming counter
\stepcounter{XCnt}
% to see the values of \MyX in the log, not necessary
\typeout{\MyX}
}
% one example to show that the nodes can be referenced
\draw [red,latex-latex] (n-1) to[bend left] (n-4);
\end{tikzpicture}
\end{center}
Then a second diagram, with slightly different equation, different initial value and scale:
\begin{center}
% set different initial value
\setlength\MyX{0.02pt}
% reset node naming counter
\setcounter{XCnt}{1}
% change scale, if necessary
\renewcommand\XScale{50}
\renewcommand\XMax{4}
\begin{tikzpicture}
\draw[gray, very thin,-stealth] (0,0) -- (\XMax*\XScale pt+3mm,0); % +3mm to extend the line a bit
% draw tick marks:
\foreach \x in {0,...,\XMax}
\draw [gray,very thin] (\x*\XScale pt,3pt) -- +(0,-6pt) node[below]{$\x$};
\whiledo{\lengthtest{\MyX<3.999pt}}{% note changed limit
\node [inner sep=0pt,minimum size=2pt,fill,circle] (n-\theXCnt) at (\MyX*\XScale,0) {};
\pgfmathsetlengthmacro{\MyX}{\MyX/((1+\MyX)*0.2)}
\stepcounter{XCnt}
\typeout{\MyX}
}
% one example to show that the nodes can be referenced
\draw [red,latex-latex] (n-1) to[bend left] (n-4);
\end{tikzpicture}
\end{center}
\end{document}