
Quiero dibujar una recta numérica en [0,1] de modo que los nodos se coloquen en números definidos por la regla de Bayes (o cualquier función específica). Entonces, para un valor inicial de x' (especificado por mí), quiero que el programa coloque nodos en cada nodo x posterior, donde x= x'/((1+x')*0.5) y así sucesivamente hasta un máximo x de 1. Aquí hay un MWE que ideé a partir de otra publicación similar:
\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}
Ahora, no quiero que se ejecute usando muestras, sino con un valor inicial (que puedo especificar) y luego avanzar hasta otros números hasta que x llegue a 1.
Además, quiero identificar estos nodos para poder dibujar flechas curvas entre estos números para indicar saltos.
He probado varios enfoques, pero no logro que TikZ trace números específicos de dicha secuencia de acuerdo con una fórmula con un valor inicial. Por supuesto, puedo resolverlo todo fácilmente por separado y luego trazarlo, pero no quiero usar este feo método de fuerza bruta.
Cualquier ayuda será apreciada. Gracias de antemano :)
Respuesta1
Creo que esto es algo parecido a lo que quieres. El valor inicial se establece en puntos, con la \setlength
declaración. Utilicé 0,99 puntos en el bucle while, porque el valor nunca llega a 1.
El código tiene muchos comentarios, pregunte si hay algo que no esté claro o avíseme si no entendí bien.
\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}